1. 程式人生 > >C++登錄檔操作

C++登錄檔操作

一、

LONG RegOpenKeyEx(
HKEY hKey, // 需要開啟的主鍵的名稱
LPCTSTR lpSubKey, //需要開啟的子鍵的名稱
DWORD ulOptions, // 保留,設為0
REGSAM samDesired, // 安全訪問標記,也就是許可權
PHKEY phkResult // 得到的將要開啟鍵的控制代碼
)

hKey

[輸入] 當前開啟或者以下預定義的鍵。

HKEY_CLASSES_ROOT

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USERS

HKEY_CURRENT_CONFIG

Windows NT/2000/XP: HKEY_PERFORMANCE_DATAWindows 95/98/Me: HKEY_DYN_DATA

lpSubKey

[輸入] 以null結尾的字串指標,包含要開啟的登錄檔子項的名稱。如果引數設定為NULL 或者指向一個空字串,該函式將開啟由hKey引數標識的鍵的新控制代碼。這種情況下,函式不會關閉先前已經開啟的控制代碼。

ulOptions

保留,必須設定為 0

samDesired

[輸入] 對指定鍵希望得到的訪問許可權的訪問標記。 這個引數可以使下列值的聯合。

值 Meaning

phkResult

[輸出] 指向一個接收到開啟的鍵的控制代碼的變數的指標。當您不再需要返回的控制代碼時,呼叫RegCloseKey函式來關閉它。

備註

不像 RegCreateKeyEx

 函式,當指定鍵不存在 RegOpenKeyEx函式不建立新鍵。

Windows 95/98/Me: 登錄檔子鍵或值名稱不能超過255字元。

Windows 95/98/Me: RegOpenKeyExW 被 Microsoft Layer for Unicode。 想要使用, 你必須在你的應用程式中包含某些檔案。

返回值 如果函式呼叫成功,則返回0(ERROR_SUCCESS)。否則,返回值為檔案WINERROR.h中定義的一個非零的錯誤程式碼。

 二、

RegCreateKey              用於建立或開啟登錄檔項

LONG WINAPI RegCreateKey(

_In_

 HKEY hKey,

_In_opt_ LPCTSTR lpSubKey,

_Out_ PHKEY phkResult

);

hKey Long,要開啟項的控制代碼,或者一個標準項名

lpSubKey String,欲建立的新子項。可同時建立多個項,只需用反斜槓將它們分隔開即可。例如 level1\level2\newkey

phkResult Long,指定一個變數,用於裝載新子項的控制代碼

返回值 如果函式呼叫成功,則返回0(ERROR_SUCCESS)。否則,返回值為檔案WINERROR.h中定義的一個非零的錯誤程式碼。

 三、

RegSetValueEx   若想要設定的登錄檔項下不是預設值,即有名稱值的資料和型別時,可以呼叫RegSetValueEx函式,該函式將在登錄檔項下設定指定值的資料和型別。

LONG RegSetValueEx(

HKEY hKey,

LPCTSTR lpValueName,

DWORD Reserved,

DWORD dwType,

CONST BYTE *lpData,

DWORD cbData

);

hKey 一個已開啟項的控制代碼,或指定一個標準項名
lpValueName 指向一個字串的指標,該字串包含了欲設定值的名稱。若擁有該值名稱的值並不存在於指定的登錄檔項中,則此函式將其加入到該項。如果此值是NULL,或指向空字串,則此函式為該項的預設值或未命名值設定型別和資料。
Reserved 保留值,必須強制為0
dwType

指定將被儲存的資料型別,該引數可以為

REG_BINARY 任何形式的二進位制資料

REG_DWORD 一個32位的數字

REG_DWORD_LITTLE_ENDIAN 一個“低位元組在前”格式的32位數字

REG_DWORD_BIG_ENDIAN 一個“高位元組在前”格式的32位數字

REG_EXPAND_SZ 一個以0結尾的字串,該字串包含對環境變數(如“%PAHT”)的

未擴充套件引用

REG_LINK 一個Unicode格式的帶符號連結

REG_MULTI_SZ 一個以0結尾的字串陣列,該陣列以連線兩個0為終止符

REG_NONE 未定義值型別

REG_RESOURCE_LIST 一個裝置驅動器資源列表

REG_SZ 一個以0結尾的字串

lpData 指向一個緩衝區,該緩衝區包含了欲為指定值名稱儲存的資料。
cbData

指定由lpData引數所指向的資料的大小,單位是位元組。

返回值 如果函式呼叫成功,則返回0(ERROR_SUCCESS)。否則,返回值為檔案WINERROR.h中定義的一個非零的錯誤程式碼。

 四、

RegCloseKey           函式功能描述:釋放指定註冊鍵的控制代碼

函式原型

LONG RegCloseKey(

HKEY hKey // 釋放鍵的控制代碼

);

hKey : [輸入] 想要關閉的已經開啟的鍵。

返回值: 如果過程執行成功,返回值是 ERROR_SUCCESS。如果功能失敗,返回一個非零值,錯誤碼在 Winerror.h 定義。可以使用FormatMessage 函式和FORMAT_MESSAGE_FROM_SYSTEM 標記獲得一個分類的錯誤描述。

備註: 被關閉的控制代碼將不可以再使用,因為已經不再有效。

RegCloseKey 函式在返回以前不能執行必要的寫操作;它能夠保持幾秒鐘為快取執行寫入磁碟,如果一個應用程式必須要寫入登錄檔到硬碟,應該使用 RegFlushKey、RegFlushKey。.

 例子:

寫入登錄檔

複製程式碼

 1 void CHkeyTestDlg::OnBnClickedButton2()
 2 {    
 3     // TODO: 在此新增控制元件通知處理程式程式碼  
 4     HKEY hKey;    //主跟鍵名稱
 5     HKEY hTempKey;
 6     DWORD dwValue=6;
 7     DWORD dwSize=sizeof(DWORD);
 8     DWORD dwType=REG_DWORD;
 9 
10     LPCTSTR data_Set=_T("Software");
11     if(ERROR_SUCCESS==::RegOpenKeyEx(HKEY_CURRENT_USER,data_Set,0,KEY_SET_VALUE,&hKey))       //RegOpenKeyEx用於開啟一個指定的登錄檔鍵
12     {
13         if(ERROR_SUCCESS==::RegCreateKey(hKey,_T("test111"),&hTempKey))
14         {
15             if (ERROR_SUCCESS!=::RegSetValueEx(hTempKey,_T("Name"),0,REG_DWORD,(CONST BYTE*)&dwValue,sizeof(DWORD)))
16             {
17                 AfxMessageBox(_T("錯誤"));
18                 ::RegCloseKey(hKey);
19                 return;
20             }
21         }
22     }
23     ::RegCloseKey(hKey);
24 }

複製程式碼

五、

RegDeleteValue    是一個計算機函式,提供RS232控制和狀態訊號,用於刪除一個鍵下的一個鍵值。

LONGWINAPIRegDeleteValue(

_In_HKEYhKey,

_In_opt_LPCTSTRlpValueName

);

hKey Long,一個已開啟項的控制代碼,或標準項名之一

lpValueName String,要刪除的值名。可設為vbNullString或一個空串,表示刪除那個項的預設值

成功返回ERROR_SUCCESS ,失敗返回一個非零值

例子:

刪除鍵中的值項

複製程式碼

 1 void CHkeyTestDlg::OnBnClickedButton3()
 2 {
 3     // TODO: 在此新增控制元件通知處理程式程式碼
 4     HKEY hKey;
 5     LPCTSTR data_Set=_T("Software\\test111");
 6     if (ERROR_SUCCESS==::RegOpenKeyEx(HKEY_CURRENT_USER,data_Set,0,KEY_SET_VALUE,&hKey))
 7     {
 8         if (ERROR_SUCCESS!=::RegDeleteValue(hKey,_T("Name")))
 9         {
10             AfxMessageBox(_T("錯誤"));
11             ::RegCloseKey(hKey);
12             return;
13         }
14     }
15     ::RegCloseKey(hKey);
16 }

複製程式碼