2013-12-18 51 views
0

我正在嘗試執行一個應用程序,該應用程序顯示從註冊表中獲取PC的計算機名稱。它必須在64位窗口7機器上運行。使用RegQueryValueEx從註冊表中獲取機器名稱

但我只能設法輸出系統錯誤信息。

在下面的代碼, I(使用RegOpenKeyEx方法)=>總是得到value1str的值爲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'如下所示。 –

回答

0

您可以從以下提到的註冊表鍵讀取計算機名稱,

系統\ CurrentControlSet \控制\計算機名\計算機名

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