我想从注册表项中获取值。下面是我的代码:
#include <atlbase.h>
#include <atlstr.h>
#include <iostream>
#define BUFFER 8192
int main()
{
char value[255];
DWORD BufferSize = BUFFER;
RegGetValue(HKEY_LOCAL_MACHINE, L"SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName", L"ComputerName", RRF_RT_REG_SZ, NULL, (PVOID)&value, &BufferSize);
std::cout << value << std::endl;
}
我的电脑名是:DESKTOP-IGW3F.但是如果我运行我的程序,我的输出是:D
我不知道如何修复它…我希望你能帮助我。
Win32函数RegGetValue()
不存在。它只是一个预处理器宏,将根据您的项目设置解析为RegGetValueA()
或RegGetValueW()
。在您的示例中,宏解析为RegGetValueW()
,因此它将注册表值视为Unicode字符串(每个字符2字节)。但是您正在使用char
(每个字符1字节)缓冲区来接收Unicode数据。
要使您的代码工作,您需要显式地调用RegGetValueA()
,或者将缓冲区类型从char
更改为wchar_t
。无论哪种方式,您都应该检查函数的返回值。
一个工作的例子可能像这样:
#include <windows.h>
#include <iostream>
int main()
{
WCHAR value[255];
DWORD bufferSize = 255 * sizeof(WCHAR);
if (!RegGetValueW(HKEY_LOCAL_MACHINE, L"SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName", L"ComputerName", RRF_RT_REG_SZ, NULL, value, &bufferSize))
{
std::wcout << value << std::endl;
}
}