RegOpenKeyEx() 函数详解(转)

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支持

相关函数
RegCloseKey    RegSetValueEx
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值