1. 程式人生 > >Delphi中讀寫登錄檔

Delphi中讀寫登錄檔

Delphi程式中入如何操作登錄檔,在應用程式中,經常需要對登錄檔進行各種操作,如將程式名稱、安裝路徑等資訊儲存到登錄檔中。32位Delphi程式中可利用TRegistry物件來存取登錄檔檔案中的資訊。


一、建立和釋放TRegistry物件


1.建立TRegistry物件。為了操作登錄檔,要建立一個TRegistry物件:ARegistry := TRegistry.Create;


2.釋放TRegistry物件。對登錄檔操作結束後,應釋放TRegistry物件所佔記憶體:ARegistry.Destroy。


二、指定要操作的鍵


操作登錄檔時,首先應指定操作的主鍵:先給屬性RootKey賦值以指定根鍵,然後用方法OpenKey來指定要操作的主鍵名。


1.指定根鍵(RootKey)。


根鍵是登錄檔的入口,也登錄檔資訊的分類,其值可為:
HKEY-CLASSES-ROOT:儲存整個系統物件類資訊,如ActiveX物件註冊、檔案關聯等資訊。
HKEY-CURRENT-USER:儲存當前使用者的配置資訊。為屬性RootKey的預設值。
HKEY-LOCAL-MACHINE:儲存當前系統的軟硬體配置資訊。應用程式自己的資訊可以儲存在該根鍵下。
HKEY-USERS:儲存所有使用者通用的配置資訊。
還可以是HKEY-CURRENT-CONFIG、HKEY-DYN-DATA。
2.指定要操作的主鍵。


Function OpenKey(const Key: string; CanCreate: Boolean): Boolean;
Key:主鍵名,是鍵名全名中除去根鍵的部分,如Software。
CanCreate:在指定的主鍵名不存在時,是否允許建立該主鍵,True表示允許。
返回值True表示操作成功。


3.關閉當前主鍵。


在讀取或儲存資訊之後,應及時將關閉當前主鍵:procedure CloseKey。
 
三、Delphi提供了TRegistry類,它直接繼承自TObject類,主要屬性有:RootKey等,主要方法有:Create,CreateKey(Key),
OpenKey(Key,CanCreate),WriteString(Name,Value),ReadString(Name),CloseKey,Free等,下面對它們進行簡單介紹。
1、RootKey屬性
指定當前操作的登錄檔主鍵,共有HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG五種取值,預設值為HKEY_CURRENT_USER。
2、CreateKey方法
函式宣告為function CreateKey(const Key: String):Boolean;,用於在登錄檔中新建項,項的名稱為引數Key的值。
3、OpenKey方法
函 數宣告為function OpenKey(const Key: String; CanCreate: Boolean):Boolean;,其中引數Key指定要開啟的登錄檔的項,引數CanCreate指明當要開啟的項不存在時是否建立,預設值為 False;函式返回值為布林型別,如果開啟成功返回True,否則返回False。
4、WriteString方法
過程宣告為procedure WriteString(const Name, Value: String);,其中引數Name指明要寫入的登錄檔的字串的名稱,引數Value為要寫入的字串的值。如果該字串不存在則寫入,否則覆蓋原來的取值。
5、ReadString方法
函式宣告為function ReadString(const Name: String):String;,其中引數Name為要讀取的字串的名稱,函式返回值為要讀取的字串的值,是字串型別。如果該字串在登錄檔中不存在,返回值為空字串。
四、鍵值維護


除了在登錄檔中讀取、儲存外,程式可能還需要增加主鍵、刪除主鍵、主鍵改名、資料值改名等。


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


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


3.複製或移動主鍵:procedure MoveKey(const OldName, NewName: string; Delete: Boolean)。
OldName、NewName分別表示源主鍵名和目標主鍵名;Delete表示是否刪除源主鍵,True表示刪除,False表示保留。
複製或移動一個主鍵將複製或移動該子鍵下的所有資料值和子鍵內容。


4.判斷指定主鍵是否存在,其下是否有主鍵,並獲取主鍵名稱。
KeyExists用於判斷指定主鍵是否存在:
function KeyExists(const Key: string): Boolean;//返回值為True表示主鍵存在。
HasSubKeys用於判斷指定主鍵下是否有子鍵:function HasSubKeys: Boolean;
返回值為True表示主鍵下有子鍵。
GetKeyNames用於獲取子鍵名稱:procedure GetKeyNames(Strings: TStrings);
Strings用於返回當前主鍵下各子鍵的名稱。


5.獲取主鍵下的資料值名稱:procedure GetvalueNames(Strings: TStrings)。
Strings用於返回當前主鍵下各數值名稱。
如要獲取當前系統中的撥號連線名稱,可利用獲取主鍵HKEY-USERS
.DEFAULT下的數值名稱的方法來進行。


6.判斷數值名稱存在、數值名稱改名。
valueExists用於判斷數值名稱是否存在:
function valueExists(const Name: string): Boolean;
返回值為True表示數值名稱存在。
Renamevalue用於數值名稱改名:
procedure Renamevalue(const OldName, NewName: string);
五、例項
1、將自己的程式加入到登錄檔
var reg:Tregistry; //formCreate Event
begin
reg:=Tregistry.create;
reg.rootkey( 'HKEY_LOCAL_MACHINE ');
reg.openkey( 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run ');
if not keyexists( 'MyApp.exe ') then //if not exist ,add it!
writestring( 'MyApp.exe ');
end;
2、將資訊寫入登錄檔
相應程式碼如下:
var
reg:TRegistry;//宣告一個TRegistry類變數

begin
reg:=TRegistry.Create;//建立例項
reg.RootKey:=HKEY_CURRENT_USER;//指定需要操作的登錄檔的主鍵
if reg.OpenKey(’\Software\Delphi,true) then//如果開啟成功則進行以下操作
begin
reg.WriteString(’內容名稱’,'操作登錄檔’);//將需要儲存的資訊寫入登錄檔
reg.CloseKey;//關閉登錄檔
end;
reg.Free;//釋放變數所佔記憶體

end;
2、從登錄檔中讀取資訊
相應程式碼如下:
var
reg:TRegistry;//宣告一個TRegistry類變數
s:String;//宣告一個字串變數用來存放要讀取的資訊

begin
reg:=TRegistry.Create;//建立例項
reg.RootKey:=HKEY_CURRENT_USER;//指定需要操作的登錄檔的主鍵
if reg.OpenKey(’\Software\Delphi’,true) then//如果開啟成功則進行以下操作
begin
s:=reg.ReadString(’內容名稱’);//從登錄檔中讀取對應字串的值
//如果該字串不存在則返回值為空字串
reg.CloseKey;//關閉登錄檔
end;
reg.Free;//釋放變數所佔記憶體

end;