西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)Delphi → delphi 中對(duì)注冊(cè)表的操作

delphi 中對(duì)注冊(cè)表的操作

前往專(zhuān)題相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2012/8/22 11:14:56字體大。A-A+

作者:西西點(diǎn)擊:19次評(píng)論:0次標(biāo)簽: Delphi

Delphi 中對(duì)windows注冊(cè)表進(jìn)行查找,讀寫(xiě)等操作

DelPhi中對(duì)注冊(cè)表的讀寫(xiě)過(guò)程簡(jiǎn)介
在DelPhi中為程序員提供了一個(gè)Tregistry類(lèi),它提供了眾多豐富的方法來(lái)完成對(duì)注冊(cè)表的修改。

32位Delphi程序中可利用TRegistry對(duì)象來(lái)存取注冊(cè)表文件中的信息。 
  一、創(chuàng)建和釋放TRegistry對(duì)象 


  1.創(chuàng)建TRegistry對(duì)象。為了操作注冊(cè)表,要?jiǎng)?chuàng)建一個(gè)TRegistry對(duì)象:ARegistry := TRegistry.Create; 

  2.釋放TRegistry對(duì)象。對(duì)注冊(cè)表操作結(jié)束后,應(yīng)釋放TRegistry對(duì)象所占內(nèi)存:ARegistry.Destroy。 

  二、指定要操作的鍵 

  操作注冊(cè)表時(shí),首先應(yīng)指定操作的主鍵:先給屬性RootKey賦值以指定根鍵,然后用方法OpenKey來(lái)指定要操作的主鍵名。 

  1.指定根鍵(RootKey)。 
  根鍵是注冊(cè)表的入口,也注冊(cè)表信息的分類(lèi),其值可為: 
  HKEY—CLASSES—ROOT:存儲(chǔ)整個(gè)系統(tǒng)對(duì)象類(lèi)信息,如ActiveX對(duì)象注冊(cè)、文件關(guān)聯(lián)等信息。 
  HKEY—CURRENT—USER:存儲(chǔ)當(dāng)前用戶(hù)的配置信息。為屬性RootKey的默認(rèn)值。 
  HKEY—LOCAL—MACHINE:存儲(chǔ)當(dāng)前系統(tǒng)的軟硬件配置信息。應(yīng)用程序自己的信息可以存儲(chǔ)在該根鍵下。
 HKEY—USERS:存儲(chǔ)所有用戶(hù)通用的配置信息。 
  還可以是HKEY—CURRENT—CONFIG、HKEY—DYN—DATA。 

  2.指定要操作的主鍵。 
  Function OpenKey(const Key: string; CanCreate: Boolean): Boolean; 
  Key:主鍵名,是鍵名全名中除去根鍵的部分,如Software\Borland\Delphi。 
  CanCreate:在指定的主鍵名不存在時(shí),是否允許創(chuàng)建該主鍵,True表示允許。 
  返回值True表示操作成功。 

  3.關(guān)閉當(dāng)前主鍵。 
  在讀取或存儲(chǔ)信息之后,應(yīng)及時(shí)將關(guān)閉當(dāng)前主鍵:procedure CloseKey。 

  三、從注冊(cè)表中讀取信息 
  Read系列方法從注冊(cè)表讀取指定的信息(字符串、二進(jìn)制和十六進(jìn)制),并轉(zhuǎn)換為指定的類(lèi)型。 

  1.Read系列方法。 
  function ReadString(const Name: string): string; 
  讀取一個(gè)字符串值,Name為字符串名稱(chēng)。 
  function ReadInteger(const Name: string): Integer; 
  讀取一個(gè)整數(shù)值,Name為整數(shù)名稱(chēng)。 
  function ReadBinaryData(const Name: string; var Buffer; BufSize: Integer):Integer; 
  讀取二進(jìn)制值,Name為二進(jìn)制值名稱(chēng),Buffer為接收緩沖區(qū),BufSize為緩沖區(qū)大小,返回為實(shí)際讀取的字節(jié)數(shù)。 
  其它方法還有:ReadBool、ReadCurrency、ReadDate、ReadDateTime、ReadFloat、ReadTime。 

  2.讀取信息一例(顯示W(wǎng)indows的版本)。 
 在HKEY—LOCAL—MACHINE\Software\Microsoft\Windows\CurrentVersion下,有三個(gè)字符串值Version、VersionNumber和SubVersionNumber,用于記錄當(dāng)前Windows的版本號(hào)。 

  {請(qǐng)?jiān)赨ses中包含Registry單元} 
  procedure TForm1.Button1Click(Sender:TObject); 
  var 
   ARegistry : TRegistry; 
  begin 
   ARegistry := TRegistry.Create; 
  //建立一個(gè)TRegistry實(shí)例 
   with ARegistry do 
    begin 
   RootKey := HKEY—LOCAL—MACHINE;//指定根鍵為HKEY—LOCAL—MACHINE 
   //打開(kāi)主鍵Software\Microsoft\Windows\CurrentVersion 
   if OpenKey( ′Software\Microsoft\Windows\CurrentVersion′,false ) then 
   begin 
   memo1.lines.add('Windows版本:′+ ReadString(′Version′)); 
   memo1.lines.add('Windows版本號(hào):′+ ReadString(′VersionNumber′)); 
   memo1.lines.add(′Windows子版本號(hào):′+ ReadString(′SubVersionNumber′)); 
   end; 
   CloseKey;//關(guān)閉主鍵 
   Destroy;//釋放內(nèi)存 
   end; 
  end; 

  四、向注冊(cè)表中寫(xiě)入信息 
  Write系列方法將信息轉(zhuǎn)化為指定的類(lèi)型,并寫(xiě)入注冊(cè)表。 

  1.Write系列方法。 
  procedure WriteString(const Name, Value: string); 
  寫(xiě)入一個(gè)字符串值,Name為字符串的名稱(chēng),Value為字符串值。 
  procedure WriteInteger(const Name: string; Value: Integer); 
  寫(xiě)入一個(gè)整數(shù)值。 
  procedure WriteBinaryData(const Name: string; var Buffer; BufSize: Integer); 
  寫(xiě)入二進(jìn)制值,Name為二進(jìn)制值的名稱(chēng),Buffer為包含二進(jìn)制值的緩沖區(qū),BufSize為緩沖區(qū)大小。 
  其它方法還有:WriteBool、WriteCurrency、WriteDate、WriteDateTime、WriteFloat、WriteTime。 

  2.寫(xiě)入信息一例。 
  下面程序使Delphi隨Windows啟動(dòng)而自動(dòng)運(yùn)行。 

  var 
   ARegistry : TRegistry; 
  begin 
   ARegistry := TRegistry.Create; 
  //建立一個(gè)TRegistry實(shí)例 
   with ARegistry do 
   begin 
   RootKey:=HKEY—LOCAL—MACHINE; 
    if OpenKey(′Software\Microsoft\Windows\CurrentVersion\Run′,True) then 
   WriteString(′delphi′,′C:\Program Files\borland\delphi3\bin\delphi32.exe′); 
   CloseKey; 
   Destroy; 
   end; 
  end; 

  五、鍵值維護(hù) 
  除了在注冊(cè)表中讀取、存儲(chǔ)外,程序可能還需要增加主鍵、刪除主鍵、主鍵改名、數(shù)據(jù)值改名等。 

  1.創(chuàng)建新主鍵:function CreateKey(const Key: string): Boolean。 
  Key即為主鍵名,返回值True表示操作成功。 

  2.刪除主鍵:function DeleteKey(const Key: string): Boolean。 
  Key即為主鍵名,返回值True表示操作成功。 

  3.復(fù)制或移動(dòng)主鍵:procedure MoveKey(const OldName, NewName: string; Delete: Boolean)。 
  OldName、NewName分別表示源主鍵名和目標(biāo)主鍵名;Delete表示是否刪除源主鍵,True表示刪除,F(xiàn)alse表示保留。 
  復(fù)制或移動(dòng)一個(gè)主鍵將復(fù)制或移動(dòng)該子鍵下的所有數(shù)據(jù)值和子鍵內(nèi)容。 

  4.判斷指定主鍵是否存在,其下是否有主鍵,并獲取主鍵名稱(chēng)。 
  KeyExists用于判斷指定主鍵是否存在: 
  function KeyExists(const Key: string): Boolean;//返回值為T(mén)rue表示主鍵存在。 
  HasSubKeys用于判斷指定主鍵下是否有子鍵:function HasSubKeys: Boolean; 
  返回值為T(mén)rue表示主鍵下有子鍵。 
 GetKeyNames用于獲取子鍵名稱(chēng):procedure GetKeyNames(Strings: TStrings); 
 Strings用于返回當(dāng)前主鍵下各子鍵的名稱(chēng)。 

  5.獲取主鍵下的數(shù)據(jù)值名稱(chēng):procedure GetValueNames(Strings: TStrings)。 
  Strings用于返回當(dāng)前主鍵下各數(shù)值名稱(chēng)。 
  如要獲取當(dāng)前系統(tǒng)中的撥號(hào)連接名稱(chēng),可利用獲取主鍵HKEY—USERS \.DEFAULT\RemoteAccess\Addresses下的數(shù)值名稱(chēng)的方法來(lái)進(jìn)行。 

  6.判斷數(shù)值名稱(chēng)存在、數(shù)值名稱(chēng)改名。 
  ValueExists用于判斷數(shù)值名稱(chēng)是否存在: 
  function ValueExists(const Name: string): Boolean; 
  返回值為T(mén)rue表示數(shù)值名稱(chēng)存在。 
  RenameValue用于數(shù)值名稱(chēng)改名: 
  procedure RenameValue(const OldName, NewName: string); 

 以上是注冊(cè)表常用操作所對(duì)應(yīng)的TRegistry的方法和屬性,其它方法和屬性請(qǐng)參見(jiàn)Delphi聯(lián)機(jī)幫助文件。 
以上程序在PWIN 98+Delphi 3.0下調(diào)試通過(guò)。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)