说实话,我在图书馆里看过一本叫《C语言编程实战105例》的一本书,是半年前看的,那里面有相关的代码,但是你要CPU号这种高级的东东就不好办了。我从昨天开始想你的问题。也没有什么进展,就到网上就找了找,发现网上有关于这方面的贴子,但那位高手用的是linux的环境做的,在win下不能运行,
>
GlobalMemoryStatusEx
获得系统时间:
CopyBOOL WINAPI GetSystemTimes(
__out_opt LPFILETIME lpIdleTime, //空闲时间
__out_opt LPFILETIME lpKernelTime, //内核时间
__out_opt LPFILETIME lpUserTime //用户时间
);
#define _WIN32_WINNT 0x0501
#include <Windowsh>
#include <iostream>
using namespace std;
__int64 CompareFileTime ( FILETIME time1, FILETIME time2 )
{
__int64 a = time1dwHighDateTime << 32 | time1dwLowDateTime ;
__int64 b = time2dwHighDateTime << 32 | time2dwLowDateTime ;
return (b - a);
}
void main()
{
HANDLE hEvent;
BOOL res ;
FILETIME preidleTime;
FILETIME prekernelTime;
FILETIME preuserTime;
FILETIME idleTime;
FILETIME kernelTime;
FILETIME userTime;
res = GetSystemTimes( &idleTime, &kernelTime, &userTime );
preidleTime = idleTime;
prekernelTime = kernelTime;
preuserTime = userTime ;
hEvent = CreateEvent (NULL,FALSE,FALSE,NULL); // 初始值为 nonsignaled ,并且每次触发后自动设置为nonsignaled
while (1){
WaitForSingleObject( hEvent,1000 ); //等待500毫秒
res = GetSystemTimes( &idleTime, &kernelTime, &userTime );
int idle = CompareFileTime( preidleTime,idleTime);
int kernel = CompareFileTime( prekernelTime, kernelTime);
int user = CompareFileTime(preuserTime, userTime);
int cpu = (kernel +user - idle) 100/(kernel+user);//(总的时间-空闲时间)/总的时间=占用cpu的时间就是使用率
int cpuidle = ( idle) 100/(kernel+user);
cout << "CPU利用率:" << cpu << "%" << " CPU空闲率:" <<cpuidle << "%" <<endl;
preidleTime = idleTime;
prekernelTime = kernelTime;
preuserTime = userTime ;
}
}
示例代码如下:
GetsysInfoh:
#ifndef _H_GETSYSINFO#define _H_GETSYSINFO
#pragma once
#include <afxtemplh>
class GetSysInfo
{
public:
GetSysInfo(void);
~GetSysInfo(void);
public:
/获取 *** 作系统版本,Service pack版本、系统类型/
void GetOSVersion(CString &strOSVersion,CString &strServiceVersion);
BOOL IsWow64();//判断是否为64位 *** 作系统
/获取网卡数目和名字/
int GetInterFaceCount();
void GetInterFaceName(CString &InterfaceName,int pNum);
/获取物理内存和虚拟内存大小/
void GetMemoryInfo(CString &dwTotalPhys,CString &dwTotalVirtual);
/获取CPU名称、内核数目、主频/
void GetCpuInfo(CString &chProcessorName,CString &chProcessorType,DWORD &dwNum,DWORD &dwMaxClockSpeed);
/获取硬盘信息/
void GetDiskInfo(DWORD &dwNum,CString chDriveInfo[]);
/获取显卡信息/
void GetDisplayCardInfo(DWORD &dwNum,CString chCardName[]);
private:
CStringList Interfaces; //保存所有网卡的名字
CList < DWORD, DWORD &> Bandwidths; //各网卡的带宽
CList < DWORD, DWORD &> TotalTraffics; //各网卡的总流量
};
#endif
给你一个函数吧。
--------------
DWORD MyCPUSpeed()
{
BSTR bstrMyCpuName=NULL;
BSTR bstrMyPropName = NULL;
VARIANT pVal;
char szText[256];
int nCpuNum=0;
DWORD dwCpuSpeed=0;
IWbemClassObject pCpuInst=NULL;
IWbemQualifierSet pQualSet = NULL;
bstrMyPropName = SysAllocString(L"CurrentClockSpeed");
if(bstrMyPropName == NULL)
{
return dwCpuSpeed;
}
while(1)
{
memset(szText,0,sizeof(szText));
sprintf(szText,"Win32_ProcessorDeviceID=\"CPU%d\"", nCpuNum);
bstrMyCpuName = _bstr_t(szText);
if(bstrMyCpuName == NULL)
{
break;
}
if(pSvc->GetObject(bstrMyCpuName, 0L, NULL, &pCpuInst, NULL) != S_OK)
{
break;
}
if(pCpuInst->Get(bstrMyPropName, 0L, &pVal, NULL, NULL) == S_OK)
{
nCpuNum++;
dwCpuSpeed += pVallVal;
}
VariantClear(&pVal);
SysFreeString(bstrMyCpuName);
bstrMyCpuName = NULL;
}
if(bstrMyPropName != NULL)
{
SysFreeString(bstrMyPropName);
bstrMyPropName = NULL;
}
if(bstrMyCpuName != NULL)
{
SysFreeString(bstrMyCpuName);
bstrMyCpuName = NULL;
}
memset(szText,0,sizeof(szText));
sprintf(szText, "CPU个数: %d, CPU频率: %ld Mhz", nCpuNum, dwCpuSpeed);
cout<<"------------------------"<<szText<<"-------------------------"<<endl;
return dwCpuSpeed;
}
不行你再联系我。呵呵。
以上就是关于C语言读取计算机CPU的序列号、硬盘(网卡、机器名)全部的内容,包括:C语言读取计算机CPU的序列号、硬盘(网卡、机器名)、C语言获取CPU tick、64位电脑获取CPU使用率(使用c语言)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)