使用RegQueryValueEx从注册表中获取计算机名称

时间:2013-12-18 10:34:09

标签: c++ registry output desktop-application

我正在尝试执行一个应用程序,它显示从注册表获取PC的机器名称。它必须在64位窗口7机器上运行。

但我只能设法输出系统错误信息。

在下面的代码中, 我总是得到value1str的值(使用RegOpenKeyEx方法)=>为0(这是ERROR_SUCCESS) 和value2str(使用RegQueryValueEx方法)=>为2(即ERROR_FILE_NOT_FOUND)

任何人都知道如何显示真实的机器名称?

请帮忙!

#define KEY_WOW64_64KEY (0x0100)
#include <iostream>
#include <string>

BEGIN_MESSAGE_MAP(CPOConLogApp, CWinApp)
END_MESSAGE_MAP()

CPOConLogApp::CPOConLogApp()
{
    int value1;
    int value2;
    HKEY root = NULL;
    CString value1Str,value2Str;

    value1=RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ActiveComputerName"), NULL, KEY_READ|KEY_WOW64_64KEY, &root);

    value1Str.Format("%d",value1);

    MessageBoxA ( NULL, value1Str, "Test", MB_OK );

    LPBYTE data = NULL;
    DWORD dwType;
    DWORD dwSize;
    data = new BYTE[dwType];

    value2=RegQueryValueEx(HKEY_LOCAL_MACHINE,TEXT("Computer Name"), NULL, &dwType, data, &dwSize);

    value2Str.Format("%d",value2);

    MessageBoxA (NULL, value2Str , "Test", MB_OK );

}

3 个答案:

答案 0 :(得分:1)

替代解决方案:

您可以依靠Microsoft提供的API,而不是试图找到注册表中的密钥位置以及如何阅读它。

要获取计算机NetBIOS名称(在系统启动时从注册表初始化),请使用下面的GetComputerName

#include <windows.h>

int main()
{
char buf[1024];
DWORD dwCompNameLen = 1024;

if (0 != GetComputerName(buf, &dwCompNameLen)) {
    printf("name %s\n", buf);
}

return 0;
}

答案 1 :(得分:0)

您可以从下面提到的注册表项

中读取计算机名称
  

<强>系统\ CurrentControlSet \控制\计算机名\计算机名

答案 2 :(得分:0)

我发现了为什么总是ERROR_FILE_NOT_FOUND值。我想将RegOpenKeyEx的最后一个参数放到RegQueryValueEx的第一个参数中。它应该是这样的。

value2=RegQueryValueEx(root,TEXT("Computer Name"), NULL, &dwType, data, &dwSize);

如果要提示注册表的值,在这种情况下是计算机名,请使用以下代码。

value.Format("%s",pszBuffer);
MessageBoxA (NULL, value , "Test", MB_OK );