看到好多朋友询问怎样得到系统信息(象任务管理器一样),前段时间研究了一番,有所领悟,现与大家共享。
下面是部分测试代码:
#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;}