从 Windows 注册表读取 DWORD 时,我获取的是指针地址,而不是输出值

问题描述 投票:0回答:1

因此,对于一个项目,我正在尝试读取注册表

DWORD
。我已经编写了一些代码,但我得到的是指针地址作为输出,而不是我正在寻找的值。也许有人可以帮助我?

这是我的代码:

#include <windows.h>
#include <iostream>

using namespace std;

void registry_read(LPCTSTR subkey, LPCTSTR name, DWORD type)
{
    HKEY key;
    TCHAR value[255];
    DWORD value_length = 255;
    RegOpenKey(HKEY_LOCAL_MACHINE, subkey, &key);
    RegQueryValueEx(key, name, NULL, &type, (LPBYTE)&value, &value_length);
    RegCloseKey(key);
    cout << value << endl;
}

int main()
{
    registry_read(TEXT("SOFTWARE\\Valve\\Steam\\ActiveProcess"), TEXT("ActiveUser"), REG_DWORD);
    return 0;
}

我尝试使用 google/stackoverflow 来查找我的错误,但一切都不起作用,因为我找到的所有结果都是 reg_sz 而不是 reg_dword。

c++ windows registry
1个回答
1
投票

当您读取

DWORD
值时,您的
value
应为
DWORD
类型(相关的
value_length
应为
sizeof DWORD
)。

因此相关行将变为:

DWORD value;
DWORD value_length = sizeof(value);
RegOpenKey(HKEY_CURRENT_USER, subkey, &key);
RegQueryValueEx(key, name, NULL, &type, (LPBYTE)&value, &value_length);

注:
您还应该检查 API 调用的返回值(

RegOpenKey
RegQueryValueEx
)以确保它们成功。成功时他们应该返回
ERROR_SUCCESS
(失败时返回错误代码)。

© www.soinside.com 2019 - 2024. All rights reserved.