#include
#include
#include
#include
#include
#pragma comment ( lib , "Pdh.lib" )
#define MAXPATH 80
int __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);
//得到QQ进程的CPU占用率,这句出错
pdhStatus = PdhAddCounter(hQuery,"//Process(QQ)//% Processor Time",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;
}