使用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()結束查詢
posted on 2006-09-02 12:21 楊粼波 閱讀(870) 評論(1) 編輯 收藏 引用 所屬分類: C++