1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C/C++获取Windows系统CPU和内存及硬盘使用情况

C/C++获取Windows系统CPU和内存及硬盘使用情况

时间:2021-02-15 17:29:06

相关推荐

C/C++获取Windows系统CPU和内存及硬盘使用情况

//1.获取Windows系统内存使用率

[cpp]view plaincopy //windows内存使用率DWORDgetWin_MemUsage(){MEMORYSTATUSms;::GlobalMemoryStatus(&ms);returnms.dwMemoryLoad;}

//2.获取windowsCPU使用率

[cpp]view plaincopy __int64CompareFileTime(FILETIMEtime1,FILETIMEtime2){__int64a=time1.dwHighDateTime<<32|time1.dwLowDateTime;__int64b=time2.dwHighDateTime<<32|time2.dwLowDateTime;return(b-a);}//WINCPU使用情况voidgetWin_CpuUsage(){HANDLEhEvent;BOOLres;FILETIMEpreidleTime;FILETIMEprekernelTime;FILETIMEpreuserTime;FILETIMEidleTime;FILETIMEkernelTime;FILETIMEuserTime;res=GetSystemTimes(&idleTime,&kernelTime,&userTime);preidleTime=idleTime;prekernelTime=kernelTime;preuserTime=userTime;hEvent=CreateEventA(NULL,FALSE,FALSE,NULL);//初始值为nonsignaled,并且每次触发后自动设置为nonsignaledwhile(true){WaitForSingleObject(hEvent,1000);res=GetSystemTimes(&idleTime,&kernelTime,&userTime);__int64idle=CompareFileTime(preidleTime,idleTime);__int64kernel=CompareFileTime(prekernelTime,kernelTime);__int64user=CompareFileTime(preuserTime,userTime);__int64cpu=(kernel+user-idle)*100/(kernel+user);__int64cpuidle=(idle)*100/(kernel+user);cout<<"CPU利用率:"<<cpu<<"%"<<"CPU空闲率:"<<cpuidle<<"%"<<endl;preidleTime=idleTime;prekernelTime=kernelTime;preuserTime=userTime;}}[cpp]view plaincopy //获取WIN硬盘使用情况intgetWin_DiskUsage(){intDiskCount=0;DWORDDiskInfo=GetLogicalDrives();//利用GetLogicalDrives()函数可以获取系统中逻辑驱动器的数量,函数返回的是一个32位无符号整型数据。while(DiskInfo)//通过循环操作查看每一位数据是否为1,如果为1则磁盘为真,如果为0则磁盘不存在。{if(DiskInfo&1)//通过位运算的逻辑与操作,判断是否为1{++DiskCount;}DiskInfo=DiskInfo>>1;//通过位运算的右移操作保证每循环一次所检查的位置向右移动一位。//DiskInfo=DiskInfo/2;}cout<<"LogicalDiskNumber:"<<DiskCount<<endl;//-----------------------------------------------------------------------------------------intDSLength=GetLogicalDriveStrings(0,NULL);//通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。char*DStr=newchar[DSLength];//用获取的长度在堆区创建一个c风格的字符串数组GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);//通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。intDType;intsi=0;BOOLfResult;unsigned_int64i64FreeBytesToCaller;unsigned_int64i64TotalBytes;unsigned_int64i64FreeBytes;for(inti=0;i<DSLength/4;++i)//为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:\NULLB:\NULLC:\NULL,这样的信息,所以DSLength/4可以获得具体大循环范围{chardir[3]={DStr[si],':','\\'};cout<<dir;DType=GetDriveType(DStr+i*4);//GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录if(DType==DRIVE_FIXED){cout<<"HardDisk";}elseif(DType==DRIVE_CDROM){cout<<"CD-ROM";}elseif(DType==DRIVE_REMOVABLE){cout<<"RemovableDisk";}elseif(DType==DRIVE_REMOTE){cout<<"NetworkDisk";}elseif(DType==DRIVE_RAMDISK){cout<<"VirtualRAMDisk";}elseif(DType==DRIVE_UNKNOWN){cout<<"UnknownDevice";}fResult=GetDiskFreeSpaceEx(dir,(PULARGE_INTEGER)&i64FreeBytesToCaller,(PULARGE_INTEGER)&i64TotalBytes,(PULARGE_INTEGER)&i64FreeBytes);//GetDiskFreeSpaceEx函数,可以获取驱动器磁盘的空间状态,函数返回的是个BOOL类型数据if(fResult)//通过返回的BOOL数据判断驱动器是否在工作状态{cout<<"totalspace:"<<(float)i64TotalBytes/1024/1024<<"MB";//磁盘总容量cout<<"freespace:"<<(float)i64FreeBytesToCaller/1024/1024<<"MB";//磁盘剩余空间}else{cout<<"设备未准备好";}cout<<endl;si+=4;}return0;}

//main函数

[cpp]view plaincopy intmain(intargc,char**argv){//+++======================获取windows内存使用率==================+++//DWORDdwValue=getWin_MemUsage();printf("内存使用率为%d%%\n",dwValue);//+++======================获取WindowsCPU使用率====================+++////getWin_CpuUsage();//+++======================获取Windows硬盘使用====================+++//getWin_DiskUsage();return0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。