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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值