使用Windows计数器的方法(c++)
2023-09-27 14:27:55 时间
最近需要做一个具有简单功能的“任务管理器”,要求是获得当前进程列表及进程拥有者/进程内存使用量/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()结束查询
相关文章
- 【c++】STL--vector
- 【C++实战小项目】通讯录(四) 冒泡排序通过string首字母排序多个数组
- C++ windows客户端支持SSL双向认证
- 【数据库开发】windows下使用c++调用redis
- 【C++零散】unordered_map/unordered_set
- Windows编程之模块遍历(C++实现)
- C++内存管理1-64位系统运行32位软件会占用更多的内存吗?
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter
- windows下使用vscode编写运行以及调试C/C++
- 程序C++ to C#交互
- C++虚函数表调用学习
- C++学习:使用libssh2实现交互式shell的ssh2,linux和windows通用
- c++ windows 获取mac地址
- 【转】Gvim配置(Windows and Linux)for C++
- 《挑战30天C++入门极限》图例实解:C++中类的继承特性
- 【Windows 逆向】CheatEngine 工具 ( 汉化版 CE 工具推荐 | 编写简单 C++ 程序 | C++ 程序执行分析 | 使用 CE 修改上述 C++ 程序 )
- java中调用c(c++)写的dll文件的实现及步骤(转)
- C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试
- Pybinder-python与c++的调用
- Windows使用VSCode远程Linux(ConteOS)开发/调试C/C++(超详细)
- 【一】ODB - C++ 访问数据库的利器--Hello World On Windows(Version-24)
- 【一】ODB - C++ 访问数据库的利器--Hello World On Windows(Version-24)
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
- 一个Windows C++的线程类实现
- 一个远程启动windows c++程序引发的技术决策现象
- 【C++开源库】Windows 下编译 libcurl 库
- WiEngine+Eclipse+CDT+Sequoyah实现c++编程智能感知提示
- C++windows内核编程笔记day01_day02