天天看點

使用Windows計數器的方法(c++)

最近需要做一個具有簡單功能的“任務管理器”,要求是獲得目前程序清單及程序擁有者/程序記憶體使用量/PID的資訊,還需要獲得目前系統記憶體總量和已用記憶體量,在google、csdn、baidu、msdn查閱多時,基本都解決了,這裡記錄一下主要思路。

獲得系統程序清單:

先用CreateToolhelp32Snapshot()函數生成系統程序快照,

然後用Process32First()和Process32Next()就可以獲得程序名稱和對應的PID了

對指定的程序,獲得它的擁有者:

先用OpenProcess()打開指定程序,

再用OpenProcessToken()獲得令牌,

再用GetTokenInformation()獲得令牌資訊(其中就包含程序擁有者的SID),

再用LookupAccountSid()将SID翻譯成使用者名

獲得指定程序的記憶體使用量:(用性能計數器的方式獲得)

先用PdhOpenQuery()打開一個查詢,

再用PdhAddCounter()對這個查詢添加計數器:

例子:

監控指定程序消耗CPU時間

\Process(%s)\% Processor Time %s是程序名(程序名為對應的應用程式名稱去掉擴充名剩下的部分)

需要監控某個程序的記憶體使用情況,字元串如下:

\Process(%s)\Working Set %s是程序名

再用PdhCollectQueryData()收集查詢資訊,

再用PdhGetFormattedCounterValue()将查詢值格式化,

最後調用PdhCloseQuery()結束查詢