分类:
2008-10-14 14:54:48
RegOpenKeyEx
函数状态: 正式函数 ,建设者:Deane ,最新更新时间: 2002-11-3 9:47:46
函数功能描述:打开一个制定的注册表键
函数原型:
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支持
相关函数
本函数最新话题