Я пытаюсь сделать приложение, которое показывает имя компьютера для извлечения файлов из реестра. Он должен работать в 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 );
}
Альтернативное решение:
Вместо того, чтобы искать, где находится ключ в реестре и как его читать, вы можете просто полагаться на API Microsoft.
Чтобы получить имя компьютера 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;
}
Я узнал, почему всегда значение 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 );
Вы можете прочитать имя компьютера из указанного ниже раздела реестра,
System\CurrentControlSet\Control\ComputerName\ComputerName
RegQueryValueEx
заключается в том, что ключом являетсяComputerName
без пробела. Быстрая проверка сRegEdit
бы вам это. Тем не менее, используйтеGetComputerName
как показано ниже.