在Delphi程式中操作註冊表 |
|
AB
高階會員 發表:166 回覆:262 積分:125 註冊:2003-08-21 發送簡訊給我 |
在Delphi程式中操作註冊表
http://www.delphiok.com/bcjq/all/47.htm
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。 三、從註冊表中讀取資訊 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下,有三個字串值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;//關閉主鍵 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′,True) then WriteString(′delphi′,′C:Files.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下的數值名稱的方法來進行。 6.判斷數值名稱存在、數值名稱改名。 ValueExists用於判斷數值名稱是否存在: function ValueExists(const Name: string): Boolean; 返回值爲True表示數值名稱存在。 RenameValue用於數值名稱改名: procedure RenameValue(const OldName, NewName: string);發表人 - ab 於 2003/11/29 13:42:21 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |