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/Borland/Delphi。
CanCreate:在指定的主鍵名不存在時,是否允許創建該主鍵,True表示允許。
返回值True表示操作成功。
3.關閉當前主鍵。
在讀取或存儲信息之後,應及時將關閉當前主鍵:procedure CloseKey。
三、從註冊表中讀取信息
Read系列方法從註冊表讀取指定的信息(字符串、二進制和十六進制),並轉換爲指定的類型。
1.Read系列方法。
function ReadString(const Name: string): string;
讀取一個字符串值,Name爲字符串名稱。
function ReadInteger(const Name: string): Integer;
讀取一個整數值,Name爲整數名稱。
function ReadBinaryData(const Name: string; var Buffer; BufSize: Integer):Integer;
讀取二進制值,Name爲二進制值名稱,Buffer爲接收緩衝區,BufSize爲緩衝區大小,返回爲實際讀取的字節數。
其它方法還有:ReadBool、ReadCurrency、ReadDate、ReadDateTime、ReadFloat、ReadTime。
2.讀取信息一例(顯示Windows的版本)。
在HKEY—LOCAL—MACHINE/Software/Microsoft/Windows/CurrentVersion下,有三個字符串值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/Microsoft/Windows/CurrentVersion
if OpenKey( ′Software/Microsoft/Windows/CurrentVersion′,false ) then
begin
memo1.lines.add('Windows版本:′+ ReadString(′Version′));
memo1.lines.add('Windows版本號:′ + ReadString(′VersionNumber′));
memo1.lines.add(′Windows子版本號:′ + ReadString(′SubVersionNumber′));
end;
CloseKey;//關閉主鍵
Destroy;//釋放內存
end;
end;
四、向註冊表中寫入信息
Write系列方法將信息轉化爲指定的類型,並寫入註冊表。
1.Write系列方法。
procedure WriteString(const Name, Value: string);
寫入一個字符串值,Name爲字符串的名稱,Value爲字符串值。
procedure WriteInteger(const Name: string; Value: Integer);
寫入一個整數值。
procedure WriteBinaryData(const Name: string; var Buffer; BufSize: Integer);
寫入二進制值,Name爲二進制值的名稱,Buffer爲包含二進制值的緩衝區,BufSize爲緩衝區大小。
其它方法還有: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/Microsoft/Windows/CurrentVersion/Run′,True) then
WriteString(′delphi′,′C:/Program Files/borland/delphi3/bin/delphi32.exe′);
CloseKey;
Destroy;
end;
end;
五、鍵值維護
除了在註冊表中讀取、存儲外,程序可能還需要增加主鍵、刪除主鍵、主鍵改名、數據值改名等。
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/RemoteAccess/Addresses下的數值名稱的方法來進行。
6.判斷數值名稱存在、數值名稱改名。
ValueExists用於判斷數值名稱是否存在:
function ValueExists(const Name: string): Boolean;
返回值爲True表示數值名稱存在。
RenameValue用於數值名稱改名:
procedure RenameValue(const OldName, NewName: string);
以上是註冊表常用操作所對應的TRegistry的方法和屬性,其它方法和屬性請參見Delphi聯機幫助文件。