注册表操作RegOpenKeyEx()

来源:互联网 发布:3d max螺丝数据 编辑:程序博客网 时间:2024/04/30 06:33

功能描述

  RegOpenKeyEx()
  函数功能描述:打开一个指定的注册表键

原型

  LONG RegOpenKeyEx(
  HKEY hKey, // 需要打开的主键的名称
  LPCTSTR lpSubKey, //需要打开的子键的名称
  DWORD ulOptions, // 保留,设为0
  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
原创粉丝点击