1. 程式人生 > >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\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聯機幫助檔案。 
以上程式在PWIN 98+Delphi 3.0下除錯通過。 


2003-11-20 11:53:00 
檢視評語»»» 
2003-11-20 11:59:20 登錄檔中對程式設計常用的幾項(ODBC/BDE/Internet/Windows) 

我用的是 WINDOWS 2000, WIN2000 的 REGEDIT 提供了類似 IE 中收藏夾的功能,我的收藏夾中有幾個或許對大家程式設計時會有幫助(這是本人在程式設計過程中的探索出來的,請高手指教): 

1。關於 ODBC 和 DBE: 
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC File DSN 
有你的 COMPUTER 上 ODBC 的 FILE DSN 的存放的預設路徑,如果你建立 FILE DSN 的時候選擇了自己的路徑,那你就得小心了,系統不會為你儲存該路徑,你的自己記住它,:-(; 

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers 
列出了你的所有 ODBC DRIVER, 
關於 ODBC DRIVER 的名稱,有一個比較有趣的地方:不知大家又沒有用TSession.GetDriverNames 取過系統 ODBC DRIVER 名,我用的時候 DRIVER 名最長只能取到 31 個字元,剩下的就被截掉了,不知是我程式設計有問題還是 DELPHI 的 BUG; 

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI 
列出了你的所有 ODBC DRIVER 的詳細配置; 

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI 
列出了你的所有 SYSTEM DSN 以及它們的配置情況; 

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI 
列出了你的所有 USER DSN 以及它們的配置情況; 

知道了以上的幾個主鍵後,你就可以在程式中實現 %SystemRoot%\system32\odbcad32.exe 的大部分功能了。 

HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine 
下面是你的 DBE 的配置,我就不多說了,大家拿它和 BDE 使用者介面一比較就明白了。 

2。關於 INTERNET 程式設計: 

HKEY_CLASSES_ROOT\htmlfile 
系統對 HTMLFILE 的處理定義; 

HKEY_LOCAL_MACHINE\SOFTWARE\Clients 
INTERNET Option 中 INTERNET PROGRAM 的設定,尤其重要的是其中的 

HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail。 

3。關於 WINDOWS 程式設計 

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 
每次該使用者啟動 WINDOWS 必定執行下面的命令(如果有,當然一般都有), 

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runonce 
該使用者啟動 WINDOWS 必定執行下面的命令(如果有),執行完後由 WINDOWS 把命令刪掉,安裝軟體的時候特別有用, 

以上兩處是針對特定使用者的,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 下還有類似的地方,是針對所有使用者的,我就不羅嗦了。 


2003-11-20 12:16:38 Delphi 中登錄檔構件TRegistry 的應用 

在Delphi3.0 及以上版本中,提供了一個構件TRegistry。在程式中可以利用它來實現對WIN95/98/NT 登錄檔的操作,可以很方便地在登錄檔中增加、修改和刪除鍵值。這樣可以在程式中完成一些特殊的功能。 

相關推薦

delphi 操作(讀取新增刪除修改)完全手冊

    32位Delphi程式中可利用TRegistry物件來存取登錄檔檔案中的資訊。    一、建立和釋放TRegistry物件    1.建立TRegistry物件。為了操作登錄檔,要建立一個TRegistry物件:ARegistry := TRegi

delphi操作完全手冊

32位Delphi程式中可利用TRegistry物件來存取登錄檔檔案中的資訊。   一、建立和釋放TRegistry物件   1.建立TRegistry物件。為了操作登錄檔,要建立一個TRegistry物件:ARegistry := TRegistry.Create;

C++/MFC 從讀取串列埠

從登錄檔中 讀取串列埠 CComboBox m_nPortList;//列表 int InitComm() { m_nPortList.ResetContent(); HKEY hKEY; LPCTSTR data_Set=_T("HARDWARE\\DEVICEM

QT之INI檔案和操作方法學習筆記

INI檔案格式 節[section] 引數(KEY/VALUE)   name=value 註釋 註釋使用分號表示(;)。在分號後面的文字,直到該行結尾都全部為註釋 QCoreApplication::applicationDirPath()為應用程式當前的絕

Win7操作造成某些軟體中文亂碼的問題

實驗環境(藍色粗體字為特別注意內容) 1,環境:Windows 7 Ultimate 英文版 不小心改了登錄檔,重啟開機藍屏,於是選擇最近一次正確的配置選項,成功進入系統。 進入系統之後,發現某些軟體顯示亂碼,現象如下: 網上查閱相關資料,發現應該是區域和語言設定的問題,改來改去都

MFC操作詳解

前置知識:VC WIN-API MFC 我總結了一些MFC操作登錄檔,大致分3種方法:            1)WIN-API 這個是當然的了,MFC也是基於WIN-API的,所以我們直接在MFC裡面應用WIN-API的登錄檔操作函式來對操作登錄檔,是沒有一點問題的。WIN-API的登錄檔操作大家可以

VC 32位(或64位)win7作業系統的操作

1、登錄檔位置 Windows7 64bit系統的登錄檔分32 位登錄檔項和64位登錄檔項兩部分。 在64bit系統下,通過regedit中檢視到指定路徑下的登錄檔項均為64位登錄檔項,而32位登錄檔項被重定位到:   HKEY_LOCAL_MACHINE\Software\WOW6432Node。 應用

MFC操作

http://blog.csdn.net/weiwenhp/article/details/9381717 登錄檔簡介 有時程式中要存些設定資訊,一個方法就是建立一些普通的txt或xml檔案,然後儲存進去就行了.另一辦法就是儲存到登錄檔裡.登錄檔是由windows

關於開機啟動執行的操作(MFC)

Windows啟動時通常會有一大堆程式自動啟動,最重要的兩個資料夾和八個註冊鍵。 一、當前使用者專有的啟動資料夾   這是許多應用軟體自動啟動的常用位置,Windows自動啟動放入該資料夾的所有快捷方式。使用者啟動資料夾一般在:/Documents and Settings/

C#:操作

參考資料: ****************************************************************** 介面: 程式碼: using System; using System.Collections.Gen

Java 之操作

Windows Registry API Native Interface下載地址 http://www.trustice.com/java/jnireg/index.shtml 下 registry-3.1.3.zip(包含原始碼)。解開 registry-3.1.3.z

MFC的操作—CRegKey類的使用

1.簡介 CRegKey提供了對系統登錄檔的操作方法,通過CRegKey類,可以方便的開啟登錄檔的某個分支或子鍵(CRegKey::Open),可以方便的修改一個鍵的鍵值(CRegKey::SetValue),也可以查詢某個鍵的鍵值(CRegKey::QueryValue)

[Win32] 操作(2)列舉

關於WOW64的問題: 32位程式執行在64位系統上操作登錄檔會出現問題,在上篇已經有詳細的說明了,因此,這一節不再重複。 十。列舉鍵值(值項) RegEnumValue函式: LONG WINAPI RegEnumValue( _In_ HKEY

MFC 操作

BOOL CWinApp::WriteProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry,    LPCTSTR lpszValue) {  ASSERT(lpszSection != NULL);  if (m_pszRegistryKey != NUL

c++ Win x64 操作

是否為 x64 的作業系統 bool Utility::IsWow64() { typedefBOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_ISWOW64PROCESSfnIsWow64Process; B

InstallShield 操作

1.判斷登錄檔 RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); RegDBKeyExist("SOFTWARE\\Microsoft\\.NETFramework\\v2.0.50727") 2.刪除登錄檔 RegDBSetDefaultR

windows操作

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> int main(int argc, char *argv

C語言操作例項(轉)

#include <stdio.h>#include <windows.h>int main(void){char regname[]="Software//Microsoft//Windows//CurrentVersion//Run";HKEY hkResult;int ret=R

那些你用的到的C++操作

獲取登錄檔資訊 以獲取cpu資訊為例 long lRet; HKEY hKey; TCHAR tcData[64]; DWORD dwSize; lRet = RegOpenKeyEx(HKE

C++操作

一、 LONG RegOpenKeyEx(HKEY hKey, // 需要開啟的主鍵的名稱LPCTSTR lpSubKey, //需要開啟的子鍵的名稱DWORD ulOptions, // 保留,設為0REGSAM samDesired, // 安全訪問標記,也就是許可權P