MFC-用系统快照来枚举进程
2016-03-31 20:36
399 查看
用到的函数和结构体如下:
PROCESSENTRY32:
用来存放快照进程信息的一个结构体。(存放进程信息和调用成员输出进程信息)用来Process32First指向第一个进程信息,并将进程信息抽取到PROCESSENTRY32中。用Process32Next指向下一条进程信息。
这个例子的效果如图:
1.给列表添加列头
2.查找进程并显示出来
创建快照的标志:
指定快照中包含的系统内容,这个参数能够使用下列数值( 常量)中的一个或多个。
TH32CS_INHERIT - 声明快照句柄是可继承的。
TH32CS_SNAPALL - 在 快照中包含系统中所有的进程和线程。
TH32CS_SNAPHEAPLIST - 在 快照中包含在th32ProcessID中指定的进程的所有的堆。
TH32CS_SNAPMODULE - 在 快照中包含在th32ProcessID中指定的进程的所有的模块。
TH32CS_SNAPPROCESS - 在 快照中包含系统中所有的进程。
TH32CS_SNAPTHREAD - 在 快照中包含系统中所有的线程。
Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
//失败返回INVALID_HANDLE_VALUE HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, //用来指定“ 快照”中需要返回的对象,可以是TH32CS_SNAPPROCESS等 DWORD th32ProcessID//一个进程ID号,用来指定要获取哪一个进程的 快照,当获取系统进程列表或获取 当前进程快照时可以设为0 );
//TRUE成功,FALSE失败 //查找第一个系统进程 BOOL WINAPI Process32First( HANDLE hSnapshot, //快照句柄 LPPROCESSENTRY32 lppe//进程信息结构 );
//查找下一个进程 BOOL WINAPI Process32Next( HANDLE hSnapshot, LPPROCESSENTRY32 lppe );
PROCESSENTRY32:
用来存放快照进程信息的一个结构体。(存放进程信息和调用成员输出进程信息)用来Process32First指向第一个进程信息,并将进程信息抽取到PROCESSENTRY32中。用Process32Next指向下一条进程信息。
typedef struct tagPROCESSENTRY32 { DWORD dwSize; //结构的大小 DWORD cntUsage; //此进程的引用计数,这个成员不再被引用,设为0 DWORD th32ProcessID; //PID DWORD th32DefaultHeapID; //进程默认堆ID,不再被使用,设为0 DWORD th32ModuleID; //进程模块ID,不再被使用,设为0 DWORD cntThreads; //此进程开启的线程计数 DWORD th32ParentProcessID;//父进程ID LONG pcPriClassBase; //线程优先权 DWORD dwFlags; //不再被使用,设为0 TCHAR szExeFile[MAX_PATH];//进程全名 DWORD th32MemoryBase; //加载可执行文件的地址 DWORD th32AccessKey; } PROCESSENTRY32; typedef PROCESSENTRY32* PPROCESSENTRY32; typedef PROCESSENTRY32* LPPROCESSENTRY32;
这个例子的效果如图:
1.给列表添加列头
m_list.InsertColumn(0, TEXT("进程名称"), 0, 150); m_list.InsertColumn(1, TEXT("PID"), 0, 100);
2.查找进程并显示出来
//创建进程快照 HANDLE hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, //创建所有进程的快照 0 //0表示当前进程 ); if (hProcessSnap == INVALID_HANDLE_VALUE) { AfxMessageBox(TEXT("创建进程快照失败")); return; } //进程信息结构 PROCESSENTRY32 processEntry32 = { 0 }; processEntry32.dwSize = sizeof(processEntry32); //计算结构体大小 //查找第一个进程 BOOL bFind = Process32First(hProcessSnap, &processEntry32); if (!bFind) { AfxMessageBox(TEXT("没有找到第一个进程")); return; } while (bFind) { int iCount = m_list.GetItemCount(); CString s; s.Format(TEXT("%s"), processEntry32.szExeFile); m_list.InsertItem(iCount, s); s.Format(TEXT("%d"), processEntry32.th32ProcessID); m_list.SetItemText(iCount, 1, s); //查找下一个进程 bFind = Process32Next(hProcessSnap, &processEntry32); }
创建快照的标志:
指定快照中包含的系统内容,这个参数能够使用下列数值( 常量)中的一个或多个。
TH32CS_INHERIT - 声明快照句柄是可继承的。
TH32CS_SNAPALL - 在 快照中包含系统中所有的进程和线程。
TH32CS_SNAPHEAPLIST - 在 快照中包含在th32ProcessID中指定的进程的所有的堆。
TH32CS_SNAPMODULE - 在 快照中包含在th32ProcessID中指定的进程的所有的模块。
TH32CS_SNAPPROCESS - 在 快照中包含系统中所有的进程。
TH32CS_SNAPTHREAD - 在 快照中包含系统中所有的线程。
Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
相关文章推荐
- 第五周 存图 拓扑排序 欧拉路
- 多元线性回归multivariable linear regression
- SQL Server 2008可视化设置自增主键
- acm 贪心总结
- HDOJ 2053-Switch Game
- 大规模视觉识别挑战赛ILSVRC2015各团队结果和方法 Large Scale Visual Recognition Challenge 2015
- 嵌入式(Embedded)Neo4j数据库访问方法
- 二叉树的公共节点
- 自定义线性滤波
- 开发中用到的有用的快捷键(持续更新中...)
- 指针函数与函数指针的区别
- libc与glibc的概念和区别
- (OK—C程序) Eclipse C/C++ — CentOS 7 + android-ndk + eclipse-cpp-mars-R
- 输入字符串的另外一种形式
- Atitit.js的键盘按键事件捆绑and事件调度
- 线性表的应用
- 获取浏览器的名称与版本信息
- 「学习笔记」3.31代码学习
- 通海井安装SES2000管线仪
- SpringMvc与Struts2的对比_2