1. 程式人生 > >VisualC++利用CRegKey和WIN32 API獲取系統硬體資訊

VisualC++利用CRegKey和WIN32 API獲取系統硬體資訊

獲取CPU名稱、標識、製造商名稱、主頻、個數、顯示卡BIOS與系統BIOS版本號和更新日期源程式連結

LONG QueryValue( LPTSTR szValue, LPCTSTR lpszValueName, DWORD* pdwCount )

szValue:字串資料型別的鍵值

lpszValueName:所讀取鍵值項的名稱

pdwCount:字串大小

成功讀取登錄檔中某鍵值項的鍵值,成功返回ERROR_SUCCESS;失敗返回錯誤值

注意第三個引數,為儲存該鍵值的大小,應根據實際情況設定比較合理的空間,這裡為30個字元。

LONG QueryValue( DWORD& dwValue, LPCTSTR

lpszValueName)

dwValue:DWORD資料型別的鍵值

lpszValueName:所讀取鍵值項的名稱

pdwCount:字串大小

成功讀取登錄檔中某鍵值項的鍵值,成功返回ERROR_SUCCESS;失敗返回錯誤值

獲取CPU名稱

獲取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子鍵中獲取ProcessorNameString的鍵值。該登錄檔子鍵儲存了當前計算機的處理器資訊,如CPU名稱、標識和廠商等。

void CSystemHardwareInfoDlg::OnButton1() 
{
	CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);

    //開啟登錄檔主鍵   
    if (lResult!=ERROR_SUCCESS)//讀取鍵值不成功   
    {  
        AfxMessageBox("錯誤:無法查詢有關的登錄檔資訊");  
        return;  
    }  
    char chCPUName[50];  
    DWORD dwSize=50;  
    regKey.QueryValue(chCPUName,"ProcessorNameString",&dwSize);  
    //獲取RegisteredOwner的值   
    m_strCPUName=chCPUName;  
    UpdateData(FALSE);  
    regKey.Close();//關閉登錄檔
	
}

獲取CPU標識 

獲取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子鍵中獲取Identifier的鍵值。

void CSystemHardwareInfoDlg::OnButton2() 
{
	CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	
    //開啟登錄檔主鍵   
    if (lResult!=ERROR_SUCCESS)//讀取鍵值不成功   
    {  
        AfxMessageBox("錯誤:無法查詢有關的登錄檔資訊");  
        return;  
    }  
    char chCPUID[50];  
    DWORD dwSize=50;  
    regKey.QueryValue(chCPUID,"Identifier",&dwSize);  
    //獲取RegisteredOwner的值   
    m_strCPUIdentifier=chCPUID;  
    UpdateData(FALSE);  
    regKey.Close();//關閉登錄檔
	
}

獲取CPU製造商名稱 

獲取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子鍵中獲取VendorIdentifier的鍵值。


void CSystemHardwareInfoDlg::OnButton3() 
{
	CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	
    //開啟登錄檔主鍵   
    if (lResult!=ERROR_SUCCESS)//讀取鍵值不成功   
    {  
        AfxMessageBox("錯誤:無法查詢有關的登錄檔資訊");  
        return;  
    }  
    char chVendor[50];  
    DWORD dwSize=50;  
    regKey.QueryValue(chVendor,"VendorIdentifier",&dwSize);  
    //獲取RegisteredOwner的值   
    m_strVendorID=chVendor;  
    UpdateData(FALSE);  
    regKey.Close();//關閉登錄檔
	
}

獲取CPU主頻 

獲取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子鍵中獲取~MHz的鍵值。注意為DWORD型別。

void CSystemHardwareInfoDlg::OnButton4() 
{
	CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	
    //開啟登錄檔主鍵   
    if (lResult!=ERROR_SUCCESS)//讀取鍵值不成功   
    {  
        AfxMessageBox("錯誤:無法查詢有關的登錄檔資訊");  
        return;  
    }  
    DWORD dwMHz; 
    DWORD dwSize=50;  
    regKey.QueryValue(dwMHz,"~MHz");  
    //獲取RegisteredOwner的值   
    m_nMHz=dwMHz;  
    UpdateData(FALSE);  
    regKey.Close();//關閉登錄檔
	
}

獲取CPU個數 

VOID GetSystemInfo(LPSYSTEM_INFO lpSystemInfo)

lpSystemInfo:指向儲存當前計算機資訊結構的指標

功能:獲取當前計算機的資訊

//SYSTEM_INFO結構包含有關當前計算機系統的資訊。包括處理器型別,頁面大小,記憶體地址,和OEM識別符號。 

typedef struct _SYSTEM_INFO {
  union {
  DWORD dwOemId;        OemId過時的,不使用
  struct {
    WORD wProcessorArchitecture;    處理器架構
    WORD wReserved;
  };
};
  DWORD dwPageSize;        頁面大小
  LPVOID lpMinimumApplicationAddress;   應用程式最小地址
  LPVOID lpMaximumApplicationAddress;   應用程式最大地址
  DWORD dwActiveProcessorMask;     處理器掩碼
  DWORD dwNumberOfProcessors;     處理器數量
  DWORD dwProcessorType;      處理器型別
  DWORD dwAllocationGranularity;    虛擬記憶體分配粒度
  WORD wProcessorLevel;       處理器級別
  WORD wProcessorRevision;      處理器版本
} SYSTEM_INFO, *LPSYSTEM_INFO;

void CSystemHardwareInfoDlg::OnButton5() 
{

	SYSTEM_INFO sysInfo;
	GetSystemInfo(&sysInfo);
	m_dwNum=sysInfo.dwNumberOfProcessors;
	UpdateData(FALSE);
}

獲取顯示卡BIOS版本號 

獲取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System子鍵中獲取VideoBiosVersion的鍵值。

void CSystemHardwareInfoDlg::OnButton6() 
{
	CString strPath="HARDWARE\\DESCRIPTION\\System";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	
    //開啟登錄檔主鍵   
    if (lResult!=ERROR_SUCCESS)//讀取鍵值不成功   
    {  
        AfxMessageBox("錯誤:無法查詢有關的登錄檔資訊");  
        return;  
    }  
    char chBiosVersion[2500];
	DWORD dwSize=2500;
    regKey.QueryValue((char*)chBiosVersion,"VideoBiosVersion",&dwSize);  
     
    m_strBiosID=chBiosVersion; 
    UpdateData(FALSE);  
    regKey.Close();//關閉登錄檔
	
}

獲取顯示卡BIOS更新日期 

獲取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System子鍵中獲取VideoBiosDate的鍵值。


void CSystemHardwareInfoDlg::OnButton7() 
{
	CString strPath="HARDWARE\\DESCRIPTION\\System";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	
    //開啟登錄檔主鍵   
    if (lResult!=ERROR_SUCCESS)//讀取鍵值不成功   
    {  
        AfxMessageBox("錯誤:無法查詢有關的登錄檔資訊");  
        return;  
    }  
    char chVideoBiosDate[50];
	DWORD dwSize=50;
    regKey.QueryValue((char*)chVideoBiosDate,"VideoBiosDate",&dwSize);  
	
    m_strBiosDate=chVideoBiosDate; 
    UpdateData(FALSE);  
    regKey.Close();//關閉登錄檔
	
}

獲取系統BIOS版本號 

獲取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System子鍵中獲取SystemBiosVersion的鍵值。

void CSystemHardwareInfoDlg::OnButton8() 
{
	CString strPath="HARDWARE\\DESCRIPTION\\System";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	
    //開啟登錄檔主鍵   
    if (lResult!=ERROR_SUCCESS)//讀取鍵值不成功   
    {  
        AfxMessageBox("錯誤:無法查詢有關的登錄檔資訊");  
        return;  
    }  
    char chBios[2500];
	DWORD dwSize=2500;
    regKey.QueryValue((char*)chBios,"SystemBiosVersion",&dwSize);  
	
    m_strBios=chBios; 
    UpdateData(FALSE);  
    regKey.Close();//關閉登錄檔
	
}


獲取系統BIOS更新日期 

獲取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System子鍵中獲取SystemBiosDate的鍵值。

void CSystemHardwareInfoDlg::OnButton9() 
{
	CString strPath="HARDWARE\\DESCRIPTION\\System";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	
    //開啟登錄檔主鍵   
    if (lResult!=ERROR_SUCCESS)//讀取鍵值不成功   
    {  
        AfxMessageBox("錯誤:無法查詢有關的登錄檔資訊");  
        return;  
    }  
    char chBiosDate[50];
	DWORD dwSize=50;
    regKey.QueryValue((char*)chBiosDate,"SystemBiosDate",&dwSize);  
	
    m_strSystemBiosDate=chBiosDate; 
    UpdateData(FALSE);  
    regKey.Close();//關閉登錄檔
	
	
}