因此,对于一个项目,我正在尝试读取注册表
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。
当您读取
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
(失败时返回错误代码)。