eric
eric

Reputation: 147

Get machine name from registry using RegQueryValueEx

I am trying to do an application which shows machine name of the PC fetch from registry. It has to run in 64 bit window 7 machine.

But I can only manage to output the system error message.

In below code, I always get value of value1str (using RegOpenKeyEx method) => as 0 (which is ERROR_SUCCESS) and value2str (using RegQueryValueEx method) => as 2 (which is ERROR_FILE_NOT_FOUND)

Anyone knows how to display the real machine name?

Please help!

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

}

Upvotes: 0

Views: 1660

Answers (3)

eric
eric

Reputation: 147

I found out why always ERROR_FILE_NOT_FOUND value. I suppose to put last parameter of RegOpenKeyEx to the first parameter in RegQueryValueEx. It should be like this.

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

If you want prompts the value of the registry, computer name in this case, use the below code.

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

Upvotes: 0

alexbuisson
alexbuisson

Reputation: 8469

Alternative solution:

Instead of trying to find where is the key in the Registry and how to read it, you can just rely on the API Microsoft provide.

To get the Computer NetBIOS name (initialized from registry at system startup) use GetComputerName like below.

#include <windows.h>

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

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

return 0;
}

Upvotes: 1

Ashok Chellappan
Ashok Chellappan

Reputation: 122

You can read the computer name from the below mentioned registry key,

System\CurrentControlSet\Control\ComputerName\ComputerName

Upvotes: 0

Related Questions