C语言读取计算机CPU的序列号、硬盘(网卡、机器名)

C语言读取计算机CPU的序列号、硬盘(网卡、机器名),第1张

说实话,我在图书馆里看过一本叫《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语言)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9867336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存