设为首页 加入收藏

TOP

9.1.3 获取系统进程的技巧
2013-10-07 00:13:56 来源: 作者: 【 】 浏览:59
Tags:9.1.3 获取 系统 进程 技巧

9.1.3  获取系统进程的技巧

1.问题阐述

进程的定义是为执行程序指令的线程而保留的一系列资源的集合。进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。进程是一些所有权的集合,一个进程拥有内存、CPU运行时间等一系列资源,为线程的运行提供一个环境,每个进程都有它自己的地址空间和动态分配的内存、线程、文件和其他一些模块。

2.实现技巧

系统统快照的获取可以通过Win32 API函数CreateToolhelp32Snapshot()来完成,通过该函数不仅可以获取进程的快照,同样可以获取堆、模块和线程的系统快照。函数的声明如下:

 HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags,     //指定要创建包含哪一类系统信息的快照函数
DWORD th32ProcessID     //指定进程的ID号,当设定为0时表示指定当前进程
);
一旦系统得到系统快照句柄,就可以对当前的标识号进行枚举,进程号通过函数Process32First()和Procee32Next()得到,这两个函数可以用于获取系统快照中第一个和下一个系统的信息,这两个函数的声明如下:
BOOL WINAPI Process32First(
HANDLE hSnapshot,       // 系统快照句柄
LPPROCESSENTRY32 lppe    // 指向结构体PROCESSENTRY32的指针
);
BOOL WINAPI Process32Next(
HANDLE hSnapshot,    // 系统快照句柄
LPPROCESSENTRY32 lppe     // 指向结构体PROCESSENTRY32的指针
);
3.实例代码
#include <tlhelp32.h>
void CTestView::OnRButtonDown(UINT nFlags, CPoint point)
{
CString StrInfo="系统当前进程包括:\n";
int nProcess =0;
HANDLE snapshot=CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0) ;
if(snapshot == NULL)return ;
SHFILEINFO shSmall;
PROCESSENTRY32 processinfo ;
processinfo.dwSize=sizeof(processinfo) ;
BOOL status=Process32First(snapshot,&processinfo) ;
while (status)
{
ZeroMemory(&shSmall, sizeof(shSmall));  
SHGetFileInfo(processinfo.szExeFile,0,&shSmall,sizeof(shSmall),
SHGFI_ICON|SHGFI_SMALLICON);
StrInfo+=processinfo.szExeFile;
StrInfo+="\n";
status = Process32Next (snapshot, &processinfo) ;
nProcess++; 
}
MessageBox(StrInfo,"信息提示",MB_OK);
CView::OnRButtonDown(nFlags, point);
}

4.小结

获取当前系统所有已启动的进程,通常分为两个过程:首先获取系统进程快照,然后根据快照枚举进程。在Windows操作系统下,系统已为所有保存在系统内存中的进程、线程及模块等当前状态的信息制作了一个系统快照,用户可以通过对系统快照的访问完成对进程当前状态的检测。

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇9.1.4 终止指定进程的技巧 下一篇9.2.1 线程的概念

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: