在Delphi程序中操作注冊表 |
日期:2004年7月17日 作者: 人氣: 1901 |
32位Delphi程序中可利用TRegistry對象來存取注冊表文件中的信息。 一、創(chuàng)建和釋放TRegistry對象 1.創(chuàng)建TRegistry對象。為了操作注冊表,要創(chuàng)建一個TRegistry對象:ARegistry := TRegistry.Create; 2.釋放TRegistry對象。對注冊表操作結(jié)束后,應(yīng)釋放TRegistry對象所占內(nèi)存:ARegistry.Destroy。 二、指定要操作的鍵 操作注冊表時,首先應(yīng)指定操作的主鍵:先給屬性RootKey賦值以指定根鍵,然后用方法OpenKey來指定要操作的主鍵名。 1.指定根鍵(RootKey)。 根鍵是注冊表的入口,也注冊表信息的分類,其值可為: HKEY-CLASSES-ROOT:存儲整個系統(tǒng)對象類信息,如ActiveX對象注冊、文件關(guān)聯(lián)等信息。 HKEY-CURRENT-USER:存儲當前用戶的配置信息。為屬性RootKey的默認值。 HKEY-LOCAL-MACHINE:存儲當前系統(tǒng)的軟硬件配置信息。應(yīng)用程序自己的信息可以存儲在該根鍵下。 HKEY-USERS:存儲所有用戶通用的配置信息。 還可以是HKEY-CURRENT-CONFIG、HKEY-DYN-DATA。 2.指定要操作的主鍵。 Function OpenKey(const Key: string; CanCreate: Boolean): Boolean; Key:主鍵名,是鍵名全名中除去根鍵的部分,如Software。 CanCreate:在指定的主鍵名不存在時,是否允許創(chuàng)建該主鍵,True表示允許。 返回值True表示操作成功。 3.關(guān)閉當前主鍵。 在讀取或存儲信息之后,應(yīng)及時將關(guān)閉當前主鍵:procedure CloseKey。 三、從注冊表中讀取信息 Read系列方法從注冊表讀取指定的信息(字符串、二進制和十六進制),并轉(zhuǎn)換為指定的類型。 1.Read系列方法。 function ReadString(const Name: string): string; 讀取一個字符串值,Name為字符串名稱。 function ReadInteger(const Name: string): Integer; 讀取一個整數(shù)值,Name為整數(shù)名稱。 function ReadBinaryData(const Name: string; var Buffer; BufSize: Integer):Integer; 讀取二進制值,Name為二進制值名稱,Buffer為接收緩沖區(qū),BufSize為緩沖區(qū)大小,返回為實際讀取的字節(jié)數(shù)。 其它方法還有:ReadBool、ReadCurrency、ReadDate、ReadDateTime、ReadFloat、ReadTime。 2.讀取信息一例(顯示W(wǎng)indows的版本)。 在HKEY-LOCAL-MACHINE下,有三個字符串值Version、VersionNumber和SubVersionNumber,用于記錄當前Windows的版本號。 {請在Uses中包含Registry單元} procedure TForm1.Button1Click(Sender:TObject); var ARegistry : TRegistry; begin ARegistry := TRegistry.Create; //建立一個TRegistry實例 with ARegistry do begin RootKey := HKEY-LOCAL-MACHINE;//指定根鍵為HKEY-LOCAL-MACHINE //打開主鍵Software if OpenKey( ′Software′,false ) then begin memo1.lines.add(‘Windows版本:′+ ReadString(′Version′)); memo1.lines.add(‘Windows版本號:′ + ReadString(′VersionNumber′)); memo1.lines.add(′Windows子版本號:′ + ReadString(′SubVersionNumber′)); end; CloseKey;//關(guān)閉主鍵 Destroy;//釋放內(nèi)存 end; end; 四、向注冊表中寫入信息 Write系列方法將信息轉(zhuǎn)化為指定的類型,并寫入注冊表。 1.Write系列方法。 procedure WriteString(const Name, value: string); 寫入一個字符串值,Name為字符串的名稱,value為字符串值。 procedure WriteInteger(const Name: string; value: Integer); 寫入一個整數(shù)值。 procedure WriteBinaryData(const Name: string; var Buffer; BufSize: Integer); 寫入二進制值,Name為二進制值的名稱,Buffer為包含二進制值的緩沖區(qū),BufSize為緩沖區(qū)大小。 其它方法還有:WriteBool、WriteCurrency、WriteDate、WriteDateTime、WriteFloat、WriteTime。 2.寫入信息一例。 下面程序使Delphi隨Windows啟動而自動運行。 var ARegistry : TRegistry; begin ARegistry := TRegistry.Create; //建立一個TRegistry實例 with ARegistry do begin RootKey:=HKEY-LOCAL-MACHINE; if OpenKey(′Software′,True) then WriteString(′delphi′,′C:Files.exe′); CloseKey; Destroy; end; end; 五、鍵值維護 除了在注冊表中讀取、存儲外,程序可能還需要增加主鍵、刪除主鍵、主鍵改名、數(shù)據(jù)值改名等。 1.創(chuàng)建新主鍵:function CreateKey(const Key: string): Boolean。 Key即為主鍵名,返回值True表示操作成功。 2.刪除主鍵:function DeleteKey(const Key: string): Boolean。 Key即為主鍵名,返回值True表示操作成功。 3.復(fù)制或移動主鍵:procedure MoveKey(const OldName, NewName: string; Delete: Boolean)。 OldName、NewName分別表示源主鍵名和目標主鍵名;Delete表示是否刪除源主鍵,True表示刪除,F(xiàn)alse表示保留。 復(fù)制或移動一個主鍵將復(fù)制或移動該子鍵下的所有數(shù)據(jù)值和子鍵內(nèi)容。 4.判斷指定主鍵是否存在,其下是否有主鍵,并獲取主鍵名稱。 KeyExists用于判斷指定主鍵是否存在: function KeyExists(const Key: string): Boolean;//返回值為True表示主鍵存在。 HasSubKeys用于判斷指定主鍵下是否有子鍵:function HasSubKeys: Boolean; 返回值為True表示主鍵下有子鍵。 GetKeyNames用于獲取子鍵名稱:procedure GetKeyNames(Strings: TStrings); Strings用于返回當前主鍵下各子鍵的名稱。 5.獲取主鍵下的數(shù)據(jù)值名稱:procedure GetvalueNames(Strings: TStrings)。 Strings用于返回當前主鍵下各數(shù)值名稱。 如要獲取當前系統(tǒng)中的撥號連接名稱,可利用獲取主鍵HKEY-USERS .DEFAULT下的數(shù)值名稱的方法來進行。 6.判斷數(shù)值名稱存在、數(shù)值名稱改名。 valueExists用于判斷數(shù)值名稱是否存在: function valueExists(const Name: string): Boolean; 返回值為True表示數(shù)值名稱存在。 Renamevalue用于數(shù)值名稱改名: procedure Renamevalue(const OldName, NewName: string); 以上是注冊表常用操作所對應(yīng)的TRegistry的方法和屬性,其它方法和屬性請參見Delphi聯(lián)機幫助文件。 |
DELPHI加注冊表自啟動的最簡單代碼 |
日期:2005年4月25日 作者:jondynet 人氣: 645 |
uses registry; var reg:tregistry; begin reg:=tregistry.create; reg.rootkey:=HKEY_LOCAL_MACHINE; reg.openkey(‘SOFTWARE\Microsoft\Windows\CurrentVersion\Run‘,true); reg.WriteString(‘ScanRegistry‘,‘mir47.EXE‘); reg.closekey; reg.free; end. |