2008-11-30 11 views
2

我想編寫一個程序,將確定一臺機器(用於許可目的),我因子評分有關獲取以下信息,並編制這一數據的XML文件:獲取機器性能

  1. MAC地址。 CPU數據(串行,製造等)
  2. 母板識別。 (串行,製造等)

有人可以向我推薦一個提供這種信息的庫 - 我用C++編寫我的程序,並有麻煩找到這樣的lib。

我應該在註冊表中挖掘這些信息嗎?

非常感謝, 奧弗

回答

3

使用WMI並獲得主板的序列號應該是足夠的(其他選項不太安全,因爲一臺舊電腦可能沒有網絡適配器和/或CPU可以改變比主板更可能)。

+0

值得注意的是,可能有多個MAC地址,並且它們可能會頻繁更改(例如,筆記本內置的WiFi卡,通過USB內部連接,可能完全消失使用); – atzz 2008-11-30 17:20:51

+0

..並且WMI可以在目標機器上禁用,並且不存在於舊系統(Win2K,Win9x)上。但是,就兼容性而言,WMI仍然是最好的選擇。 – atzz 2008-11-30 17:23:29

0

GetAdaptersInfo()會給你MAC地址。這裏有一個如何用於此目的的例子。

/** ************************************* 

    return string containing first MAC address on computer 

    NOTE: requires adding Iphlpapi.lib to project 

*/ 
string GetMac() 
{ 
    char data[4096]; 
    ZeroMemory(data, 4096); 
    unsigned long len = 4000; 
    PIP_ADAPTER_INFO pinfo = (PIP_ADAPTER_INFO) data; 
    char sbuf[20]; 
    string sret; 

    DWORD ret = GetAdaptersInfo(pinfo, &len); 
    if(ret != ERROR_SUCCESS) 
     return string("**ERROR**"); 

    for(int k = 0; k < 5; k++) { 
     sprintf(sbuf,"%02X-",pinfo->Address[k]); 
     sret += sbuf; 
    } 
    sprintf(sbuf,"%02X",pinfo->Address[5]); 
    sret += sbuf; 

    return(sret); 
} 

對於一個完整的系統做這樣的事情的一個例子,看看Manuele Sicuteri的CodeProject上article

0

不要使用WMI(慢,沒有安裝NT) 使用標準的Win32 API

見新聞://comp.os.ms-windows.programmer.win32 其中所有這一切都爲回答數十年(C/++代碼)