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

王朝vc·作者佚名  2006-01-08
宽屏版  字体: |||超大  

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

下面是部分测试代码:

#include <windows.h>

#include <stdio.h>

#include <conio.h>

#include <tchar.h>

#include <pdh.h>

#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);

// "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;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有