我正在尝试执行一个应用程序,它显示从注册表获取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 );
}
答案 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 );