如题!

解决方案 »

  1.   

    我收藏的资源管理器http://d.download.csdn.net/down/529874/zhoujianhei
      

  2.   

    http://www.codeproject.com/KB/system/Task_Manager_Extension.aspx
    这个是你想要的 task manager的实现版 含源码
      

  3.   

    一般来说,每个进程只能获得自己的系统状态数据,
    所以建议你转换一下思路,不放用HOOK来做
      

  4.   

    GetProcessTimes可以取得进程在内核模式和用户模式所占用的CPU时间,加在一起就是总时间。在一段时间内,两次调用GetProcessTimes,将时间的差值除以间隔时间就是CPU的占用率。
      

  5.   

    这贴以前就有人问过,你找找吧,网上大把资料. 
    要得到远程主机的cpu利用率应该在远程主机上有相关服务才行,当然你自己也可以做一个客户端和服务端,用客户端连接到服务端上,然后用服务端来得到数据并发送回客户端。  
      得到数据可以参见:  
      BOOL  GetProcessTimes(  
          HANDLE  hProcess,                      //  handle  to  process  
          LPFILETIME  lpCreationTime,  //  process  creation  time  
          LPFILETIME  lpExitTime,          //  process  exit  time  
          LPFILETIME  lpKernelTime,      //  process  kernel-mode  time  
          LPFILETIME  lpUserTime            //  process  user-mode  time  
      );  
      所有的内核时间+用户时间就是cpu时间,也就是cpu利用率。  
      当然这里面要得到所有进程的句柄才行,得到所有进程句柄可以参见:  
      //  copy  right  @  1995-2001  for  bsmith  in  Zhejiang  university  
      //  no  use  in  mechical  
      HANDLE FSnapshotHandle;  
      HANDLE hProcess;  
      PROCESSENTRY32  FProcessEntry32;  
      BOOL  ContinueLoop;  
                FSnapshotHandle    
      =  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  
                FProcessEntry32.dwSize    
      =  sizeof(FProcessEntry32);  
                ContinueLoop    
      =  Process32First(FSnapshotHandle,&  FProcessEntry32);  
      while  (ContinueLoop)  
      {  
              hProcess  =  OpenProcess( PROCESS_QUERY_INFORMATION, FALSE,  
                                                              FProcessEntry32.th32ProcessID);  
              CloseHandle(hProcess);  
              ContinueLoop  
      =  Process32Next(FSnapshotHandle,&  FProcessEntry32);  
      }  
      CloseHandle(FSnapshotHandle);  
      

  6.   

    刚看到一篇文章,你看看是否有用.
    <Getting CPU Usage in a Multiprocessor Machine>
    http://www.codeproject.com/KB/system/MultiCPUUsage.aspx
      

  7.   

    使用pdh的API最简单.LONG GetProcessCPUUsage()
    {
     
     HQUERY          hQuery;
     HCOUNTER        hCounter;
     PDH_FMT_COUNTERVALUE   fmtValue;
     DWORD           ctrType;
     typedef HANDLE  PDH_HQUERY;
     typedef HANDLE  PDH_HCOUNTER; char PathBuffer[MAX_PATH] = {0};
     ZeroMemory(PathBuffer,sizeof(PathBuffer));
     _snprintf(PathBuffer,sizeof(PathBuffer) - 1,"\\Process(%s)\\%c Processor Time","explorer",'%');   if (PdhOpenQuery(0,0,&hQuery) == ERROR_SUCCESS)
     {
     if (PdhAddCounter(hQuery,PathBuffer,0,&hCounter) == ERROR_SUCCESS)
     {
     LONG Start = 0;
     LONG End = 0;  for (UINT i = 0 ; i < 2; i++)
     {
     if (PdhCollectQueryData(hQuery) == ERROR_SUCCESS)
     {
     if (PdhGetFormattedCounterValue(hCounter,PDH_FMT_LONG,&ctrType,&fmtValue) == ERROR_SUCCESS)
     {
     if (i == 0)
     {
     Start = fmtValue.longValue;
     }
     else
     {
     End = fmtValue.longValue;
     if (End > Start)
     {
     PdhCloseQuery(hQuery);
     return (End - Start);
     }
     else
     {
     PdhCloseQuery(hQuery);
     return End;
     }
     }
     }
     else
     {
     break;
     }
     }
     else
     {
     break;
     }
     Sleep(1000);
     }
     }
     PdhCloseQuery(hQuery);
     }
     return -1;
    }以上代码得到explorer的CPU使用率,自己改下就能适用于所有系统进程.