VC枚举系统进程 WINAPI: CreateToolhelp32Snapshot
程序员文章站
2022-07-05 12:44:38
...
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
/*
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags, //系统快照要查看的信息类型
DWORD th32ProcessID //指向要获取进程快照的ID,获取系统内所有进程快照时是0;
);
函数调用成功返回快照句柄,否则返回INVALID_HANDLE_VALUE。在得到系统进程快照句柄之后,需要调用Process32First函数查找系统进程快照中的第一个进程。
BOOL Process32First(
HANDLE hSnapshot,
LPROCESSENTRY32 lppe
);
再调用Process32Next函数列出系统中其它进程:
BOOL Process32Next(
HANDLE hSnapshot,
LPROCESSENTRY32 lppe
);
两个函数的参数是一样的,其中hSnapshot是由CreateToolHelp32Snapshot函数返回的系统进程快照的句柄;而lppe是指向PROCESSENTRY的结构体指针,进程的详细信息保存在结构体中。
typedef struct tagPROCESSENTRY32 {
DWORD dwSize;//结构大小
DWORD cntUsage;//此进程的引用计数
DWORD th32ProcessID;//进程ID
DWORD th32DefaultHeapID;//进程默认堆ID
DWORD th32ModuleID;//进程模块ID
DWORD cntThreads;//此进程开启的线程计数
DWORD th32ParentProcessID;//父进程ID
LONG pcPriClassBase;//线程优先权
DWORD dwFlags;//保留
char szExeFile[MAX_PATH];//进程名
} PROCESSENTRY32;
*/
int GetProcess()
{
PROCESSENTRY32 pe32; //保存进程信息结构体
pe32.dwSize = sizeof(pe32);//初始化
//获取进程快照的句柄
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot error\n");
return 0;
}
//获取第一个进程信息
BOOL bProcess = Process32First(hProcessSnap, &pe32);
while (bProcess)
{
//打印进程信息
printf("进程名:%ls----PID:%d\n", pe32.szExeFile, pe32.th32ProcessID);
bProcess = Process32Next(hProcessSnap, &pe32);
}
//关闭句柄
CloseHandle(hProcessSnap);
return 0;
};
int main()
{
GetProcess();
return 0;
}
上一篇: Java Calendar与TimeZone之间的故事
下一篇: LeetCode91. 解码方法