获得系统中某个进程的cpu使用率!(ZZ)

列举所有进程的CPU占用率)  
  typedef   struct   _THREAD_INFO  
  {  
  LARGE_INTEGER   CreateTime;  
  DWORD   dwUnknown1;  
  DWORD   dwStartAddress;  
  DWORD   StartEIP;  
  DWORD   dwOwnerPID;  
  DWORD   dwThreadId;  
  DWORD   dwCurrentPriority;  
  DWORD   dwBasePriority;  
  DWORD   dwContextSwitches;  
  DWORD   Unknown;  
  DWORD   WaitReason;  
   
  }THREADINFO,   *PTHREADINFO;  
   
  typedef   struct   _UNICODE_STRING  
  {  
  USHORT   Length;  
  USHORT   MaxLength;  
  PWSTR   Buffer;  
   
  }   UNICODE_STRING;  
   
  typedef   struct   _PROCESS_INFO  
  {  
  DWORD   dwOffset;  
  DWORD   dwThreadsCount;  
  DWORD   dwUnused1[6];  
  LARGE_INTEGER   CreateTime;  
  LARGE_INTEGER   UserTime;  
  LARGE_INTEGER   KernelTime;  
  UNICODE_STRING   ProcessName;  
   
  DWORD   dwBasePriority;  
  DWORD   dwProcessID;  
  DWORD   dwParentProcessId;  
  DWORD   dwHandleCount;  
  DWORD   dwUnused3[2];  
   
  DWORD   dwVirtualBytesPeak;  
  DWORD   dwVirtualBytes;  
  ULONG   dwPageFaults;  
  DWORD   dwWorkingSetPeak;  
  DWORD   dwWorkingSet;  
  DWORD   dwQuotaPeakPagedPoolUsage;  
  DWORD   dwQuotaPagedPoolUsage;  
  DWORD   dwQuotaPeakNonPagedPoolUsage;  
  DWORD   dwQuotaNonPagedPoolUsage;  
  DWORD   dwPageFileUsage;  
  DWORD   dwPageFileUsagePeak;  
   
  DWORD   dCommitCharge;  
  THREADINFO   ThreadSysInfo[1];  
   
  }   PROCESSINFO,   *PPROCESSINFO;  
   
   
  //每秒钟查询一次  
  void   __fastcall   TForm1::Timer1Timer(TObject   *Sender)  
  {  
  Button2Click(NULL);  
  }  
  //---------------------------------------------------------------------------  
   
  void   __fastcall   TForm1::Button2Click(TObject   *Sender)  
  {  
  PVOID   pProcInfo   =   NULL;  
  DWORD   dwInfoSize   =   0x20000;  
  PPROCESSINFO   pProcessInfo;  
  DWORD   dwWorkingSet;  
  long   (   __stdcall   *NtQuerySystemInformation   )(   DWORD,   PVOID,   DWORD,   DWORD   );  
   
   
  static   __int64   LastTotalProcessCPUUsage   =   0;  
  static   __int64   LastCurrentProcessCPUUsage   =   0;  
   
  int   CurrentDelta;  
  int   TotalDelta;  
   
  __int64   TotalProcessCPUUsage   =   0;  
  __int64   CurrentProcessCPUUsage   =   0;  
   
  /  
   
  pProcInfo   =   (PVOID)(new   byte[dwInfoSize]);  
   
  NtQuerySystemInformation   =   (long(__stdcall*)(DWORD,PVOID,DWORD,DWORD))  
  GetProcAddress(   GetModuleHandle(   "ntdll.dll"   ),"NtQuerySystemInformation"   );  
   
  NtQuerySystemInformation(5,pProcInfo,dwInfoSize,0);  
   
  pProcessInfo   =   (PPROCESSINFO)pProcInfo;  
   
  do  
  {  
  TotalProcessCPUUsage   +=   (__int64)pProcessInfo->KernelTime.QuadPart   +   (__int64)pProcessInfo->UserTime.QuadPart;  
   
  if(pProcessInfo->dwProcessID   ==   GetCurrentProcessId())  
  {  
  dwWorkingSet   =   pProcessInfo->dwWorkingSet;    
  CurrentProcessCPUUsage   +=   (__int64)pProcessInfo->KernelTime.QuadPart   +   (__int64)pProcessInfo->UserTime.QuadPart;  
  }  
   
  /  
  if(pProcessInfo->dwOffset   ==   0)  
  {  
  break;  
  }  
   
  pProcessInfo   =   (PPROCESSINFO)((byte*)pProcessInfo   +   pProcessInfo->dwOffset);  
  }  
  while(true);  
   
  TotalDelta   =   TotalProcessCPUUsage   -   LastTotalProcessCPUUsage;  
  CurrentDelta   =   CurrentProcessCPUUsage   -   LastCurrentProcessCPUUsage;  
   
  if(TotalDelta   !=   0)  
  this->Caption   =   "CPU   =   "   +   IntToStr(100   *   CurrentDelta   /   TotalDelta)   +    
  "Memory   =   "+   IntToStr(dwWorkingSet   /   1024)   "   K";  
   
  LastTotalProcessCPUUsage   =   TotalProcessCPUUsage;  
  LastCurrentProcessCPUUsage   =   CurrentProcessCPUUsage;  
   
  delete[]   pProcInfo;  
  }  

 

 

 

BY  bcb四大名捕的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值