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

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

 

[cpp] view plain copy

 

  1. //windows 内存 使用率  
  2. DWORD getWin_MemUsage(){  
  3.     MEMORYSTATUS ms;  
  4.     ::GlobalMemoryStatus(&ms);  
  5.     return ms.dwMemoryLoad;  
  6. }  

 

 

//2.获取windowsCPU使用率

 

[cpp] view plain copy

 

  1. __int64 CompareFileTime(FILETIME time1, FILETIME time2)  
  2. {  
  3.     __int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime;  
  4.     __int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime;  
  5.   
  6.     return (b - a);  
  7. }  
  8. //WIN CPU使用情况  
  9. void getWin_CpuUsage(){  
  10.     HANDLE hEvent;  
  11.     BOOL res;  
  12.     FILETIME preidleTime;  
  13.     FILETIME prekernelTime;  
  14.     FILETIME preuserTime;  
  15.     FILETIME idleTime;  
  16.     FILETIME kernelTime;  
  17.     FILETIME userTime;  
  18.   
  19.     res = GetSystemTimes(&idleTime, &kernelTime, &userTime);  
  20.     preidleTime = idleTime;  
  21.     prekernelTime = kernelTime;  
  22.     preuserTime = userTime;  
  23.   
  24.     hEvent = CreateEventA(NULL, FALSE, FALSE, NULL); // 初始值为 nonsignaled ,并且每次触发后自动设置为nonsignaled  
  25.   
  26.     while (true){  
  27.         WaitForSingleObject(hEvent, 1000);  
  28.         res = GetSystemTimes(&idleTime, &kernelTime, &userTime);  
  29.   
  30.         __int64 idle = CompareFileTime(preidleTime, idleTime);  
  31.         __int64 kernel = CompareFileTime(prekernelTime, kernelTime);  
  32.         __int64 user = CompareFileTime(preuserTime, userTime);  
  33.   
  34.         __int64 cpu = (kernel + user - idle) * 100 / (kernel + user);  
  35.         __int64 cpuidle = (idle)* 100 / (kernel + user);  
  36.         cout << "CPU利用率:" << cpu << "%" << " CPU空闲率:" << cpuidle << "%" << endl;  
  37.   
  38.         preidleTime = idleTime;  
  39.         prekernelTime = kernelTime;  
  40.         preuserTime = userTime;  
  41.     }  
  42. }  

[cpp] view plain copy

 

  1. //获取 WIN 硬盘使用情况  
  2. int getWin_DiskUsage(){  
  3.     int DiskCount = 0;  
  4.     DWORD DiskInfo = GetLogicalDrives();  
  5.     //利用GetLogicalDrives()函数可以获取系统中逻辑驱动器的数量,函数返回的是一个32位无符号整型数据。    
  6.     while (DiskInfo)//通过循环操作查看每一位数据是否为1,如果为1则磁盘为真,如果为0则磁盘不存在。    
  7.     {  
  8.         if (DiskInfo & 1)//通过位运算的逻辑与操作,判断是否为1    
  9.         {  
  10.             ++DiskCount;  
  11.         }  
  12.         DiskInfo = DiskInfo >> 1;//通过位运算的右移操作保证每循环一次所检查的位置向右移动一位。    
  13.         //DiskInfo = DiskInfo/2;    
  14.     }  
  15.     cout << "Logical Disk Number:" << DiskCount << endl;  
  16.     //-----------------------------------------------------------------------------------------  
  17.     int DSLength = GetLogicalDriveStrings(0, NULL);  
  18.     //通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。    
  19.     char* DStr = new char[DSLength];//用获取的长度在堆区创建一个c风格的字符串数组    
  20.     GetLogicalDriveStrings(DSLength, (LPTSTR)DStr);  
  21.     //通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。    
  22.   
  23.     int DType;  
  24.     int si = 0;  
  25.     BOOL fResult;  
  26.     unsigned _int64 i64FreeBytesToCaller;  
  27.     unsigned _int64 i64TotalBytes;  
  28.     unsigned _int64 i64FreeBytes;  
  29.   
  30.     for (int i = 0; i<DSLength / 4; ++i)//为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:\NULLB:\NULLC:\NULL,这样的信息,所以DSLength/4可以获得具体大循环范围    
  31.     {  
  32.         char dir[3] = { DStr[si], ':', '\\' };  
  33.         cout << dir;  
  34.         DType = GetDriveType(DStr + i * 4);  
  35.         //GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录    
  36.         if (DType == DRIVE_FIXED)  
  37.         {  
  38.             cout << "Hard Disk";  
  39.         }  
  40.         else if (DType == DRIVE_CDROM)  
  41.         {  
  42.             cout << "CD-ROM";  
  43.         }  
  44.         else if (DType == DRIVE_REMOVABLE)  
  45.         {  
  46.             cout << "Removable Disk";  
  47.         }  
  48.         else if (DType == DRIVE_REMOTE)  
  49.         {  
  50.             cout << "Network Disk";  
  51.         }  
  52.         else if (DType == DRIVE_RAMDISK)  
  53.         {  
  54.             cout << "Virtual RAM Disk";  
  55.         }  
  56.         else if (DType == DRIVE_UNKNOWN)  
  57.         {  
  58.             cout << "Unknown Device";  
  59.         }  
  60.   
  61.         fResult = GetDiskFreeSpaceEx(  
  62.             dir,  
  63.             (PULARGE_INTEGER)&i64FreeBytesToCaller,  
  64.             (PULARGE_INTEGER)&i64TotalBytes,  
  65.             (PULARGE_INTEGER)&i64FreeBytes);  
  66.         //GetDiskFreeSpaceEx函数,可以获取驱动器磁盘的空间状态,函数返回的是个BOOL类型数据    
  67.         if (fResult)//通过返回的BOOL数据判断驱动器是否在工作状态    
  68.         {  
  69.             cout << " totalspace:" << (float)i64TotalBytes / 1024 / 1024 << " MB";//磁盘总容量    
  70.             cout << " freespace:" << (float)i64FreeBytesToCaller / 1024 / 1024 << " MB";//磁盘剩余空间    
  71.         }  
  72.         else  
  73.         {  
  74.             cout << " 设备未准备好";  
  75.         }  
  76.         cout << endl;  
  77.         si += 4;  
  78.     }  
  79.     return 0;  
  80. }  

 

//main函数

 

[cpp] view plain copy

 

    1. int main( int argc, char **argv )  
    2. {  
    3.     //+++======================获取windows 内存使用率==================+++//  
    4.     DWORD dwValue = getWin_MemUsage();  
    5.     printf("内存使用率为 %d %% \n",dwValue);  
    6.     //+++======================获取Windows CPU使用率====================+++//  
    7.     //getWin_CpuUsage();  
    8.     //+++======================获取Windows 硬盘使用====================+++//  
    9.     getWin_DiskUsage();  
    10.         return 0;  
    11. }  
时间: 2024-10-14 06:16:39

C/C++获取Windows系统CPU和内存及硬盘使用情况的相关文章

使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子_python

例子一: Python用WMI模块获取windowns系统的硬件信息:硬盘分区.使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息. 复制代码 代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import wmi import os import sys import platform import time def sys_version():      c = wmi.WMI ()     #获取操作系统

详解C#获取特定进程CPU和内存使用率_C#教程

首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetCurrentProcess()方法来获取当前程序所对应的进程对象.当有了进程对象后,可以通过进程对象名称来创建PerformanceCounter类型对象,通过设定PerformanceCounter构造函数的参数实现获取特定进程的CPU和内存使用情况. 具体实例代码如下: 首先是获取本机中所有进程对象,分别输出某一时刻各个进程的内存使用情况: using

这段百度问答,对我相关有对啊!!!----如何获取Windows系统登陆用户名

如何获取Windows系统登陆用户名   http://zhidao.baidu.com/link?url=Hva9PkVwYZv8KSEWftSqTWe8fqM1dhoq59BurnfADmcOvFjFgJUONb2kQ4KrJUF5KjOTXjCf5SQKYNLhcU_dBMzGGBxFxJCRfxCmamIjUji   ======================= 一般用 GetUserName(或 GetUserNameEx )函数可得到当前登陆登陆用户名(但不总会得到,下面会分析),

PowerShell小技巧之获取Windows系统密码Hash_PowerShell

当你拿到了系统控制权之后如何才能更长的时间内控制已经拿到这台机器呢?作为白帽子,已经在对手防线上撕开一个口子,如果你需要进一步扩大战果,你首先需要做的就是潜伏下来,收集更多的信息便于你判断,便于有更大的收获.用什么方法才能有尽可能高的权限,同时能更有效的隐藏自己,是留webshell,留后门,种木马还是Rootkit?webshell,哪怕是一句话木马都很容易被管理员清除,放了木马,也容易被有经验的管理员查出,不管是早期自己创建进程,进程被干掉就完了,还是注入进程的木马,或者是以服务自启动的木马

Linux下查看CPU型号,内存大小,硬盘空间的命令(详解)_Linux

1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | wc -l 2 **uniq命令:删除重复行;wc –l命令:统计行数** 1.2 查看CPU核数 # cat /proc/cpuinfo | grep "cpu cores" | uniq cpu cores : 4 1.3 查看CPU型号 # cat /proc/cpuinfo | grep 'model name' |un

C/C++获取操作系统、CPU、内存信息(windows和linux)

有时候需要在工程里面获取一些系统或者硬件的信息,比如系统版本,cpu,内存,显卡,硬盘等,作为后续软件功能判断的依据,甚至参与性能算法自适应建模 Windows 操作系统和内存信息在windows下通过系统的API来获取,CPU信息则需要需要通过底层CPUID指令取得 代码:   [cpp] view plain copy    print? #include <iostream>    #include <string>   #include <windows.h> 

解析Android获取系统cpu信息,内存,版本,电量等信息的方法详解_Android

Android获取系统cpu信息,内存,版本,电量等信息 1.CPU频率,CPU信息:/proc/cpuinfo和/proc/stat 通过读取文件/proc/cpuinfo系统CPU的类型等多种信息.读取/proc/stat 所有CPU活动的信息来计算CPU使用率 下面我们就来讲讲如何通过代码来获取CPU频率: 复制代码 代码如下: package com.orange.cpu; import java.io.BufferedReader;import java.io.FileNotFound

获取系统信息(CPU、内存等)

简述 获取计算机CPU.主板.内存.硬盘.网卡这些信息,Qt中没有相应的处理,所以需要根据平台来做差异化处理.也许Qt为了跨平台,没有提供与操作系统和硬件密切相关的一些功能(如内存.CPU.硬盘等相关信息). 简述 获取CPU信息 Linux Windows 获取内存信息 获取CPU信息 Linux 很简单,直接读取这几个文件就好了. /proc/cpuinfo 处理器信息 /proc/meminfo 物理内存信息 /proc/vmstat 虚拟内存信息 Windows 调用相应的Win API

apache日志分析及系统cpu,内存,负载情况监控

1.根据Apache Log,获取当天秒并发数最多的记录 tail -10000 ./demo.fdipzone.com_access_log.2014-01-16_01 | cut -d"[" -f 2 | awk '{print $1;}' | sort | uniq -c | sort -nr | head tail -10000 ./demo.fdipzone.com_access_log.2014-01-16_01 | awk -F"[" '{print