RegOpenKeyEx()(轉)
RegOpenKeyEx()
函數功能描述:打開一個制定的註冊表鍵
函數原型:
LONG RegOpenKeyEx(
HKEY hKey, // 已經打開鍵的句柄
LPCTSTR lpSubKey, // 子鍵的名稱
DWORD ulOptions, // 保留
REGSAM samDesired, // 安全訪問標記
PHKEY phkResult // 指向將要打開鍵的句柄
);
參數:
hKey
[輸入] 當前打開或者以下預定義的鍵。
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
Windows NT/2000/XP: HKEY_PERFORMANCE_DATA
Windows 95/98/Me: HKEY_DYN_DATA
lpSubKey
[輸入] 指向一個非中斷字符串包含將要打開鍵的名稱。如果參數設置爲NULL 或者指向一個空字符串,過程將打開一個新的句柄由hKey參數確定的值。這種情況下,過程不會關閉先前已經打開的句柄。
ulOptions
保留,必須設置爲 0
samDesired
[輸入] 對指定鍵希望得到的訪問權限的訪問標記。 這個參數可以使下列值的聯合。
值 Meaning
KEY_CREATE_LINK 許可創建一個符號連接
KEY_CREATE_SUB_KEY 許可創建子鍵
KEY_ENUMERATE_SUB_KEYS 許可列舉子鍵
KEY_EXECUTE 許可讀訪問
KEY_NOTIFY 許可提供更該通知
KEY_QUERY_VALUE 許可查詢子鍵數據
KEY_SET_VALUE 許可設置子鍵數據
KEY_ALL_ACCESS 聯合了 KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS,
KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK,
KEY_SET_VALUE 訪問權限並且加上所有的標準訪問權限
除了SYNCHRONIZE
KEY_READ 聯合了 STANDARD_RIGHTS_READ, KEY_QUERY_VALUE,
KEY_ENUMERATE_SUB_KEYS,KEY_NOTIFY 訪問權限
KEY_WOW64_64KEY Windows XP: 使64位或者32位應用程序打開64位鍵
KEY_WOW64_32KEY Windows XP: 使64位或者32位應用程序打開32位鍵
KEY_WRITE 聯合 STANDARD_RIGHTS_WRITE, KEY_SET_VALUE,
KEY_CREATE_SUB_KEY訪問權限
phkResult
[輸出] 指向一個被打開鍵返回的句柄的指針。當不再需要句柄,必須調用 RegCloseKey 關閉它。
返回值:
如果過程執行成功,返回值是 ERROR_SUCCESS。
如果功能失敗,返回一個非零值,錯誤碼在 Winerror.h 定義。可以使用 FormatMessage 函數 和 FORMAT_MESSAGE_FROM_SYSTEM 標記獲得一個分類的錯誤描述。
備註:
不像 RegCreateKeyEx 函數,當指定鍵不存在 RegOpenKeyEx 函數不創建新鍵。
Windows 95/98/Me: 註冊表子鍵或值名稱不能超過255字符。
Windows 95/98/Me: RegOpenKeyExW 被 Microsoft Layer for Unicode。 想要使用, 你必須在你的應用程序中包含某些文件。
示例代碼:
//-- 轉換基礎鍵
HKEY GetBaseRegKey(char* keystr)
{
HKEY hKey;
if(strcmp(keystr,"HKEY_CLASSES_ROOT")==0)
hKey=HKEY_CLASSES_ROOT;
if(strcmp(keystr,"HKEY_CURRENT_CONFIG")==0)
hKey=HKEY_CURRENT_CONFIG;
if(strcmp(keystr,"HKEY_CURRENT_USER")==0)
hKey=HKEY_CURRENT_USER;
if(strcmp(keystr,"HKEY_LOCAL_MACHINE")==0)
hKey=HKEY_LOCAL_MACHINE;
if(strcmp(keystr,"HKEY_USERS")==0)
hKey=HKEY_USERS;
return hKey;
}
// 刪除一個鍵值
int RegDelValue()
{
HKEY bKey,hKey;
LONG retVal;
char BaseKey[512];
char SubKey[512];
char SubKeyValueName[512];
strcpy(BaseKey,"HKEY_CURRENT_USER");
strcpy(SubKey,"Control Panel//Desktop");
strcpy(SubKeyValueName,"ShowMenuDelay");
bKey = GetBaseRegKey(BaseKey);
retVal = RegOpenKeyEx(bKey,SubKey,0,KEY_ALL_ACCESS,&hKey); //-- 打開子鍵
if (retVal != ERROR_SUCCESS)
{
return 1;
}
retVal = RegDeleteValue(hKey,(LPCTSTR)SubKeyValueName);
if(retVal !=ERROR_SUCCESS)
{
RegCloseKey(hKey);
return 2;
}
RegCloseKey(hKey);
return 0;
}
需求
Windows NT/2000/XP: 包含在 Windows NT 3.1 以後版本中。
Windows 95/98/Me: 包含在 Windows 95 以後版本中。
Header: Winreg.h; 包含在 Windows.h.
Library: 使用 Advapi32.lib.
Unicode: Unicode 和 ANSI 版本在 Windows NT/2000/XP 中支持,也被 Microsoft Layer for Unicode支持
函數功能描述:打開一個制定的註冊表鍵
函數原型:
LONG RegOpenKeyEx(
HKEY hKey, // 已經打開鍵的句柄
LPCTSTR lpSubKey, // 子鍵的名稱
DWORD ulOptions, // 保留
REGSAM samDesired, // 安全訪問標記
PHKEY phkResult // 指向將要打開鍵的句柄
);
參數:
hKey
[輸入] 當前打開或者以下預定義的鍵。
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
Windows NT/2000/XP: HKEY_PERFORMANCE_DATA
Windows 95/98/Me: HKEY_DYN_DATA
lpSubKey
[輸入] 指向一個非中斷字符串包含將要打開鍵的名稱。如果參數設置爲NULL 或者指向一個空字符串,過程將打開一個新的句柄由hKey參數確定的值。這種情況下,過程不會關閉先前已經打開的句柄。
ulOptions
保留,必須設置爲 0
samDesired
[輸入] 對指定鍵希望得到的訪問權限的訪問標記。 這個參數可以使下列值的聯合。
值 Meaning
KEY_CREATE_LINK 許可創建一個符號連接
KEY_CREATE_SUB_KEY 許可創建子鍵
KEY_ENUMERATE_SUB_KEYS 許可列舉子鍵
KEY_EXECUTE 許可讀訪問
KEY_NOTIFY 許可提供更該通知
KEY_QUERY_VALUE 許可查詢子鍵數據
KEY_SET_VALUE 許可設置子鍵數據
KEY_ALL_ACCESS 聯合了 KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS,
KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK,
KEY_SET_VALUE 訪問權限並且加上所有的標準訪問權限
除了SYNCHRONIZE
KEY_READ 聯合了 STANDARD_RIGHTS_READ, KEY_QUERY_VALUE,
KEY_ENUMERATE_SUB_KEYS,KEY_NOTIFY 訪問權限
KEY_WOW64_64KEY Windows XP: 使64位或者32位應用程序打開64位鍵
KEY_WOW64_32KEY Windows XP: 使64位或者32位應用程序打開32位鍵
KEY_WRITE 聯合 STANDARD_RIGHTS_WRITE, KEY_SET_VALUE,
KEY_CREATE_SUB_KEY訪問權限
phkResult
[輸出] 指向一個被打開鍵返回的句柄的指針。當不再需要句柄,必須調用 RegCloseKey 關閉它。
返回值:
如果過程執行成功,返回值是 ERROR_SUCCESS。
如果功能失敗,返回一個非零值,錯誤碼在 Winerror.h 定義。可以使用 FormatMessage 函數 和 FORMAT_MESSAGE_FROM_SYSTEM 標記獲得一個分類的錯誤描述。
備註:
不像 RegCreateKeyEx 函數,當指定鍵不存在 RegOpenKeyEx 函數不創建新鍵。
Windows 95/98/Me: 註冊表子鍵或值名稱不能超過255字符。
Windows 95/98/Me: RegOpenKeyExW 被 Microsoft Layer for Unicode。 想要使用, 你必須在你的應用程序中包含某些文件。
示例代碼:
//-- 轉換基礎鍵
HKEY GetBaseRegKey(char* keystr)
{
HKEY hKey;
if(strcmp(keystr,"HKEY_CLASSES_ROOT")==0)
hKey=HKEY_CLASSES_ROOT;
if(strcmp(keystr,"HKEY_CURRENT_CONFIG")==0)
hKey=HKEY_CURRENT_CONFIG;
if(strcmp(keystr,"HKEY_CURRENT_USER")==0)
hKey=HKEY_CURRENT_USER;
if(strcmp(keystr,"HKEY_LOCAL_MACHINE")==0)
hKey=HKEY_LOCAL_MACHINE;
if(strcmp(keystr,"HKEY_USERS")==0)
hKey=HKEY_USERS;
return hKey;
}
// 刪除一個鍵值
int RegDelValue()
{
HKEY bKey,hKey;
LONG retVal;
char BaseKey[512];
char SubKey[512];
char SubKeyValueName[512];
strcpy(BaseKey,"HKEY_CURRENT_USER");
strcpy(SubKey,"Control Panel//Desktop");
strcpy(SubKeyValueName,"ShowMenuDelay");
bKey = GetBaseRegKey(BaseKey);
retVal = RegOpenKeyEx(bKey,SubKey,0,KEY_ALL_ACCESS,&hKey); //-- 打開子鍵
if (retVal != ERROR_SUCCESS)
{
return 1;
}
retVal = RegDeleteValue(hKey,(LPCTSTR)SubKeyValueName);
if(retVal !=ERROR_SUCCESS)
{
RegCloseKey(hKey);
return 2;
}
RegCloseKey(hKey);
return 0;
}
需求
Windows NT/2000/XP: 包含在 Windows NT 3.1 以後版本中。
Windows 95/98/Me: 包含在 Windows 95 以後版本中。
Header: Winreg.h; 包含在 Windows.h.
Library: 使用 Advapi32.lib.
Unicode: Unicode 和 ANSI 版本在 Windows NT/2000/XP 中支持,也被 Microsoft Layer for Unicode支持
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.