一.由于没有直接可得到CPU信息的API函数,这里使用注册表来得到CPU信息。通过查看注册表HKEY_LOCAL_MACHINE/Hardware/Description/System /CentralProcessor/0下的键值,可以得到答案。 可以用API函数RegQueryValueEx()得到这些键的信息 LONG RegQueryValueEx( HKEY hKey, // 键的句柄 LPCTSTR lpValueName, // 指向包含查询值的字符串 LPDWORD lpReserved, // 备用 LPDWORD lpType, // 缓存类型 LPBYTE lpData, // 接收数据缓存 LPDWORD lpcbData // 缓存大小 ); //以下是示例代码 void CpuInfo(HWND hwnd) { int result; HKEY hKey; DWORD dataMHz=0; DWORD dataSize = sizeof(dataMHz); TCHAR Identifier[100],ProcessorNameString[100],VendorIdentifier[100]; TCHAR buffer[256]; result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Hardware//Description//System//CentralProcessor//0", 0,KEY_QUERY_VALUE,&hKey); if(result==ERROR_SUCCESS) { result = RegQueryValueEx(hKey,TEXT("~MHz"),NULL,NULL, (LPBYTE)&dataMHz,&dataSize); ZeroMemory(buffer,256); wsprintf(buffer,"~MHz: %d/r/n",dataMHz); SetDlgItemText(hwnd,IDC_STATIC1,buffer); dataSize=sizeof(Identifier); ZeroMemory(Identifier,100); result = RegQueryValueEx(hKey,TEXT("Identifier"),NULL,NULL, (LPBYTE)Identifier,&dataSize); ZeroMemory(buffer,256); wsprintf(buffer,"Identifier: %s/n",Identifier); SetDlgItemText(hwnd,IDC_STATIC2,buffer); dataSize=sizeof(ProcessorNameString); ZeroMemory(ProcessorNameString,100); result = RegQueryValueEx(hKey,TEXT("ProcessorNameString"),NULL,NULL, (LPBYTE)ProcessorNameString,&dataSize); ZeroMemory(buffer,256); wsprintf(buffer,"ProcessorNameString: %s/n",ProcessorNameString); SetDlgItemText(hwnd,IDC_STATIC4,buffer); dataSize=sizeof(VendorIdentifier); ZeroMemory(VendorIdentifier,100); result = RegQueryValueEx(hKey,TEXT("VendorIdentifier"),NULL,NULL, (LPBYTE)VendorIdentifier,&dataSize); ZeroMemory(buffer,256); wsprintf(buffer,"VendorIdentifier: %s/n",VendorIdentifier); SetDlgItemText(hwnd,IDC_STATIC3,buffer); } RegCloseKey(hKey); } 二.得到物理内存信息可以用函数GlobalMemoryStatus,该函数的参数为一个指向 MEMORYSTATUS结构的指针。 VOID GlobalMemoryStatus( LPMEMORYSTATUS lpBuffer // memory status structure ); typedef struct _MEMORYSTATUS { DWORD dwLength,//长度 DWORD dwMemoryLoad,//已经用的物理内存的比例 SIZE_T dwTotalPhys,//总的物理内存 SIZE_T dwAvailPhys,//可用物理内存 SIZE_T dwTotalPageFile,// 页文件大小 SIZE_T dwAvailPageFile,// 可用的页文件 SIZE_T dwTotalVirtual,// 虚拟地址空间总数 SIZE_T dwAvailVirtual,// 可用虚拟地址空间 } MEMORYSTATUS, *LPMEMORYSTATUS; void GetMemoryInfo(HWND hwnd) { double var; TCHAR buffer[100]; ZeroMemory(buffer,100); MEMORYSTATUS memoryStatus; memset(&memoryStatus,sizeof(MEMORYSTATUS),0); memoryStatus.dwLength=sizeof(MEMORYSTATUS); GlobalMemoryStatus(&memoryStatus); var=memoryStatus.dwTotalPhys/(1024*1024); sprintf(buffer,"总的物理内存:%0.0fMB",var); SetDlgItemText(hwnd,IDC_STATIC5,buffer); var=memoryStatus.dwAvailPhys/(1024*1024); sprintf(buffer,"可用物理内存:%0.0fMB",var); SetDlgItemText(hwnd,IDC_STATIC6,buffer); }