最近需要做一个具有简单功能的“任务管理器”,要求是获得当前进程列表及进程拥有者/进程内存使用量/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()结束查询
获得系统进程列表:
先用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()结束查询