最近需要做一個具有簡單功能的“任務管理器”,要求是獲得目前程序清單及程序擁有者/程序記憶體使用量/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()結束查詢