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
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();//關閉登錄檔
}