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支持
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章