Получить имя машины из реестра, используя RegQueryValueEx

0

Я пытаюсь сделать приложение, которое показывает имя компьютера для извлечения файлов из реестра. Он должен работать в 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
    Причина RegQueryValueEx заключается в том, что ключом является ComputerName без пробела. Быстрая проверка с RegEdit бы вам это. Тем не менее, используйте GetComputerName как показано ниже.
Теги:
output
desktop-application
registry

3 ответа

1

Альтернативное решение:

Вместо того, чтобы искать, где находится ключ в реестре и как его читать, вы можете просто полагаться на 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;
}
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 );
0

Вы можете прочитать имя компьютера из указанного ниже раздела реестра,

System\CurrentControlSet\Control\ComputerName\ComputerName

Ещё вопросы

Сообщество Overcoder
Наверх
Меню