曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5227|回复: 0
打印 上一主题 下一主题

[注册表] RegOpenKeyEx() -- 打开已经存在的键

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2013-4-16 10:43:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 来观察一下是否创建了相应的键及键值:

由上图可见设置是正确的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 21:26 , Processed in 0.068631 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表