使用Win32API来枚举当前进程

首先需要了解的一个函数就是CreateToolhelp32Snapshot函数,需要用到#include "tlhelp32.h"头文件

这个函数的作用是给系统正在运行的进程建立一个进程快照。

函数原型

HANDLE WINAPI CreateToolhelp32Snapshot(

DWORD dwFlags, 

DWORD th32ProcessID

);

函数参数

dwFlags

指定快照中包含的系统内容,这个参数能够使用下列数值(常量)中的一个或多个。

TH32CS_INHERIT(0x80000000) - 声明快照句柄是可继承的。

TH32CS_SNAPALL - 在快照中包含系统中所有的进程和线程。

TH32CS_SNAPHEAPLIST(0x00000001) - 在快照中包含在th32ProcessID中指定的进程的所有的堆。

TH32CS_SNAPMODULE(0x00000008) - 在快照中包含在th32ProcessID中指定的进程的所有的模块。

TH32CS_SNAPPROCESS(0x00000002) - 在快照中包含系统中所有的进程。

TH32CS_SNAPTHREAD(0x00000004) - 在快照中包含系统中所有的线程。

H32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)

th32ProcessID

指定将要快照的进程ID。如果该参数为0表示快照当前进程。该参数只有在设置了TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。

接下来写个例子用来打印出当前所有进程名和进程ID:

int main()
{LPCWSTR pwszProcName = NULL;HANDLE hProcess = NULL;HANDLE hProcSnap = INVALID_HANDLE_VALUE;PROCESSENTRY32W pe32w;hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hProcSnap == INVALID_HANDLE_VALUE) {goto L_Cleanup;}ZeroMemory(&pe32w, sizeof(PROCESSENTRY32W));pe32w.dwSize = sizeof(PROCESSENTRY32W);if (!Process32FirstW(hProcSnap, &pe32w)) {goto L_Cleanup;}wprintf(L"PID \t ProcessName\t\n");do {wprintf(L"%u \t %s\t\n", pe32w.th32ProcessID, pe32w.szExeFile);//需要的话可以在这里使用OpenProcess获取进程的句柄hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pe32w.th32ProcessID);if (NULL == hProcess) {//获取进程句柄失败}else {//TODO:}} while (Process32NextW(hProcSnap, &pe32w));L_Cleanup:return 0;
}

打印结果:

Win32API 枚举出当前正在运行的进程相关推荐

  1. linux查看进程ppid,pidof命令从运行的进程中以名称查找出进程号PID/PPID横向大到小展示...

    1.释义 从运行的进程中以名称查找出进程号PID/PPID横向大到小展示 2.系统帮助 PIDOF(8) Linux System Administrator's Manual PIDOF(8) NA ...

  2. c++ 进程快照_如何在 Linux 中找出内存消耗最大的进程

    很多次,你可能遇见过系统消耗了过多的内存.如果是这种情况,那么最好的办法是识别出 Linux 机器上消耗过多内存的进程. -- Magesh Maruthamuthu(作者) 很多次,你可能遇见过系统 ...

  3. WMI技术介绍和应用——查询正在运行的进程信息

    在<WMI技术介绍和应用--使用VC编写一个半同步查询WMI服务的类>一文中,我们介绍到了一个半同步查询WMI类的框架.本文将是该技术的一个应用,介绍如何使用WMI技术查询正在运行的进程信 ...

  4. linux环境下ps命令行,Linux系统ps命令详解:查看正在运行的进程

    ps命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息.ps命令有多种不同的使用方法,这常常给初学者带来困惑.在各种Linux论坛上,询问ps命令语法的帖子屡见不鲜,而出现这 ...

  5. 如何在 Linux 中找出内存消耗最大的进程

    很多次,你可能遇见过系统消耗了过多的内存.如果是这种情况,那么最好的办法是识别出 Linux 机器上消耗过多内存的进程.我相信,你可能已经运行了下文中的命令以进行检查.如果没有,那你尝试过哪些其他的命 ...

  6. Android5.1.+ getRunningAppProcesses()获取运行中进程(第三方开源库)

    google可能为了安全考虑,在5.1.+后调用activitymanager.getRunningAppProcesses()方法只能返回你自己应用的进程,那如何在5.1.+后获取运行中进程呢?一个 ...

  7. 为什么建议一个容器中只运行一个进程

    文章首发于:https://www.cnblogs.com/JasonCeng/p/14814888.html 在云原生与容器化时代浪潮下,大多数新手的普遍认识是"容器=虚拟机", ...

  8. teradata查看正在运行的进程_使用 Oracle GoldenGate 进行实时数据集成

    使用 Oracle GoldenGate 进行实时数据集成 了解如何安装.设置和配置 Oracle GoldenGate 以轻松实现 Oracle Database 10g 和 11g 之间数据的无缝 ...

  9. Linux中查看所有正在运行的进程

    你可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可 ...

最新文章

  1. sql移除数据中的换行符和回车符
  2. 如何优雅的实现 Spring Boot 接口参数加密解密?
  3. SDCC 2016 中国软件开发者大会盛大开幕
  4. Android Studio 填坑指南
  5. 【Fragment】管理机制
  6. ASP.NET Core的Kestrel服务器
  7. 第一篇: 词向量之Word2vector原理浅析
  8. pl/sql command window 初步接触
  9. 接口测试用例_【学习】接口测试用例编写和测试关注点
  10. 两路服务器型号,两路服务器 核数
  11. eps倾斜摄影矢量化采集毕业设计_eps倾斜摄影矢量化dlg采集
  12. PHP5.4连接sqlserver
  13. php bootstrap 分页 查询,深入了解Bootstrap table表格插件(二)前后端分页模糊查询...
  14. 格式工厂 wav 比特率_Mac音乐格式转换工具
  15. 关于MATLAB中使用latex语法
  16. java基于ssm的学校教务管理系统的设计与实现
  17. 自学考试应该怎样答题才能更高分?
  18. Shiro原理流程,代码示例
  19. 解决deepin系统中某磁盘的文件为只读文件
  20. 51单片机PWM(电机调速)这个可以用在智能小车的调试

热门文章

  1. Codeforces 1060D Social Circles 思想转化
  2. 百融金服、趣店、中航信面试总结
  3. 2022 年面向初学者的15 个计算机视觉项目创意案例
  4. 科研文字工作者收藏的网站(Yama整理自用)
  5. 金融工程利率期限结构matlab,2016年武汉大学金融工程实验报告固守内容+利率期限结构及MATLAB应用...
  6. django1.11 mysql配置_使用Django1.11创建简单的资产管理平台
  7. 经典蓝牙与低功耗蓝牙BLE开发基础知识:服务、特征、属性、UUID
  8. Permission权限管理——隐私权限具体说明
  9. 计算机现代教育三大特征,现代教育技术试题和答案
  10. Gitolite + repo 搭建安卓源码开发环境