有以下四种方式:
1、通过windows SDK,读取注册表、API方式实现,但没找到读取CPU和硬盘温度的方法。
2、通过wmi COM组件实现,可以读取CPU温度,但只是开机时Bios的温度,一直不变。
3、通过cpuid指令实现,可以获取cpu相关信息,但获取温度需要读MSR寄存器,无权限。
4、驱动方式:通过winio或winring0
读注册表获取信息示例:
获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子键中获取ProcessorNameString的键值。该注册表子键存储了当前计算机的处理器信息,如CPU名称、标识和厂商,主频等。
[cpp] view plain copy
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();//关闭注册表
}
标识和厂商,主频:identifier,vendoridentifier, ~Mhz
BIOS信息所在注册表路径:HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\
显卡BIOS:videobiosversion,videobiosdate
系统bios:systembiosversion,systembiosdate
API获取CPU个数:
VOID GetSystemInfo(LPSYSTEM_INFO lpSystemInfo)
lpSystemInfo:指向存储当前计算机信息结构的指针
功能:获取当前计算机的信息
[cpp] view plain copy
//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;
[cpp] view plain copy
void CSystemHardwareInfoDlg::OnButton5()
{
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
m_dwNum=sysInfo.dwNumberOfProcessors;
UpdateData(FALSE);
}