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函式來關閉它。
備註
Windows 95/98/Me: 登錄檔子鍵或值名稱不能超過255字元。
Windows 95/98/Me: RegOpenKeyExW 被 Microsoft Layer for Unicode。 想要使用, 你必須在你的應用程式中包含某些檔案。
返回值 如果函式呼叫成功,則返回0(ERROR_SUCCESS)。否則,返回值為檔案WINERROR.h中定義的一個非零的錯誤程式碼。
二、
RegCreateKey 用於建立或開啟登錄檔項
LONG WINAPI RegCreateKey(
_In_
_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 }