如何解决读取注册表项时的问题?



我想从注册表项中获取值。下面是我的代码:

#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;
}
}

相关内容

  • 没有找到相关文章

最新更新