获取系统进程列表的实现
2008年10月22日星期三
通常,我们都用过操作系统自带的任务管理器,但是对于列表中的进程列表是如何获取的呢?我们可以使用给内存拍快照的方式获取内存中的进程列表信息。大概过程如下:
1、 初始化PROCESSENTRY32结构
PROCESSENTRY32 pe32 = {sizeof(PROCESSENTRY32)}; // 初始化结构
2、 给系统内进程拍快照
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); // 给系统内进程拍快照
3、 遍历所有进程快照,并将数据保存在结构中
// 遍历所有进程快照
if (Process32First(hProcessSnap,&pe32))
{
do
{
char szID[56];
wsprintf(szID,"%u",pe32.th32ProcessID);
LVITEM item = {0};
item.iItem = nItem;
item.mask = LVIF_TEXT;
item.pszText = (LPTSTR)pe32.szExeFile; // 进程名
::SendMessage(hWndList,LVM_INSERTITEM,0,(long)&item); // 插入一条记录
LVITEM lvi;
lvi.iSubItem = 1;
lvi.pszText = (LPTSTR)szID; // 进程ID
::SendMessage(hWndList,LVM_SETITEMTEXT,nItem,(LPARAM)&lvi); // 插入记录的内容
nItem++;
}
while (Process32Next(hProcessSnap,&pe32));
}
4、 关闭句柄
::CloseHandle(hProcessSnap);
上面代码都是Win32下编写的,同样可以在MFC下实现,但原理的都一样。
代码运行结果图如下: