轻松取得winnt下的系统资源信息(cpu利用率,内存使用情况,线程数 )

    技术2022-05-11  117

    看到好多朋友询问怎样得到系统信息(象任务管理器一样),前段时间研究了一番,有所领悟,现与大家共享。

      下面是部分测试代码:

    #include <windows.h>#include <stdio.h>#include <conio.h>#include <tchar.h>#include <pdh.h>#define MAXPATH 80int __cdecl _tmain (int argc, TCHAR **argv){  HQUERY          hQuery;  HCOUNTER        *pCounterHandle;  PDH_STATUS      pdhStatus;  PDH_FMT_COUNTERVALUE  fmtValue;  DWORD          ctrType;  CHAR            szPathBuffer[MAXPATH] = {'/0'};  int            nRetCode = 0;  // Open the query object.  pdhStatus = PdhOpenQuery (0, 0, &hQuery);  pCounterHandle = (HCOUNTER *)GlobalAlloc(GPTR, sizeof(HCOUNTER));/*//Processor(_Total)//% Processor Time CPU使用率//System//Processes 当前系统进程数//System//Threads 当前系统线程数//Memory//Commit Limit 总共内存数K (包括虚拟内存)//Memory//Committed Bytes 已用内存数K (包括虚拟内存)//TCP//Connections Active 系统中已建立的 TCP连接个数其它Object Items 可以利用PdhEnumObjects()和PdhEnumObjectItems()得到反正我只要用到上面的东东:)*/  strcat(szPathBuffer,"//System//Processes");   pdhStatus = PdhAddCounter (hQuery,  szPathBuffer,   0,   pCounterHandle);  // "Prime" counters that need two values to display a   //  formatted value.  pdhStatus = PdhCollectQueryData (hQuery);  // Get the current value of this counter.  pdhStatus = PdhGetFormattedCounterValue (*pCounterHandle,                                              PDH_FMT_DOUBLE,                                              &ctrType,                                              &fmtValue);    //fmtValue.doubleValue为所要的结果    if (pdhStatus == ERROR_SUCCESS) {        printf (TEXT(",/"%.20g/"/n"), fmtValue.doubleValue);    }else {    // Print the error value.        printf (TEXT("error./"-1/""));   }  // Close the query.  pdhStatus = PdhCloseQuery (hQuery);  return nRetCode;}

     


    最新回复(0)