最近需要做一個(gè)具有簡(jiǎn)單功能的“任務(wù)管理器”,要求是獲得當(dāng)前進(jìn)程列表及進(jìn)程擁有者/進(jìn)程內(nèi)存使用量/PID的信息,還需要獲得當(dāng)前系統(tǒng)內(nèi)存總量和已用內(nèi)存量,在google、csdn、baidu、msdn查閱多時(shí),基本都解決了,這里記錄一下主要思路。
獲得系統(tǒng)進(jìn)程列表:
先用CreateToolhelp32Snapshot()函數(shù)生成系統(tǒng)進(jìn)程快照,
然后用Process32First()和Process32Next()就可以獲得進(jìn)程名稱(chēng)和對(duì)應(yīng)的PID了
對(duì)指定的進(jìn)程,獲得它的擁有者:
先用OpenProcess()打開(kāi)指定進(jìn)程,
再用OpenProcessToken()獲得令牌,
再用GetTokenInformation()獲得令牌信息(其中就包含進(jìn)程擁有者的SID),
再用LookupAccountSid()將SID翻譯成用戶名
獲得指定進(jìn)程的內(nèi)存使用量:(用性能計(jì)數(shù)器的方式獲得)
先用PdhOpenQuery()打開(kāi)一個(gè)查詢,
再用PdhAddCounter()對(duì)這個(gè)查詢添加計(jì)數(shù)器:
例子:
監(jiān)控指定進(jìn)程消耗CPU時(shí)間
\Process(%s)\% Processor Time %s是進(jìn)程名(進(jìn)程名為對(duì)應(yīng)的應(yīng)用程序名稱(chēng)去掉擴(kuò)展名剩下的部分)
需要監(jiān)控某個(gè)進(jìn)程的內(nèi)存使用情況,字符串如下:
\Process(%s)\Working Set %s是進(jìn)程名再用PdhCollectQueryData()收集查詢信息,
再用PdhGetFormattedCounterValue()將查詢值格式化,
最后調(diào)用PdhCloseQuery()結(jié)束查詢