RegOpenKeyEx() 函数用来打开注册表已经存在的键,其原型如下:LONG WINAPI RegOpenKeyEx(
__in HKEY hKey,
__in_opt LPCTSTR lpSubKey,
__reserved DWORD ulOptions,
__in REGSAM samDesired,
__out PHKEY phkResult
); 第 1 个参数 hKey 是输入参数,表示要打开的键,可以是 RegCreateKeyEx() 或者是 RegOpenKeyEx() 等函数的返回值。它还可以是下面几个预定义键之一:HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
第 2 个参数 lpSubKey 是个输入参数,表示的是子键名称字符串,比如:HKEY_CURRENT_USER 键下面的 “Software\Kingsoft\Antivirus” (安装过金山毒霸才有的键)。
第 3 个参数 ulOptions 是系统保留参数,调用时设置为 0 。
第 4 个参数 samDesired 是输入参数,表示存取权限,比如读,写这种权限,具体的权限描述可参考 SDK 文档。
第 5 个参数 phkResult 是输出参数,指向保存键句柄的 HKEY 类型的变量。在用 RegCloseKey() 关闭键时就会用到这个值。
函数的返回值是 LONG 类型,成功时返回 ERROR_SUCCESS ,否则可用FormatMessage() 函数设置 FORMAT_MESSAGE_FROM_SYSTEM 来获取错误信息。
测试代码:
[C++] 纯文本查看 复制代码 #include "stdafx.h"
#include <Windows.h>
#include <Winreg.h>
void Add_Key(HKEY hKey)
{
HKEY hSubKey;
DWORD dwKeyValue = 110;
RegCreateKey(hKey, TEXT("RegAdder"), &hSubKey);
if ( ERROR_SUCCESS != RegSetValueEx(hSubKey, TEXT("TEST"), NULL, REG_DWORD, (const byte*)&dwKeyValue, sizeof(DWORD))) {
printf ("Error\n");
}
}
int _tmain(int argc, _TCHAR* argv[])
{
HKEY hMyTestKey;
if ( RegOpenKeyEx ( HKEY_CURRENT_USER, TEXT("SOFTWARE"),
0, KEY_READ | KEY_WRITE,
&hMyTestKey) == ERROR_SUCCESS)
{
Add_Key(hMyTestKey);
}
return 0;
}
运行该程序后,再使用注册表编辑器 regedit 来观察一下是否创建了相应的键及键值:
由上图可见设置是正确的。 |