列出所有进程。 必须通过调用tlhelp32.h标头中的CreateToolHelp32Snapshot函数来获取系统进程快照的句柄。 函数的具体形式如下。
handle _ winapicreatetoolhelp 32 snapshot (
DWORD dwFlags,
dword th32进程
);
各参数的含义如下。
dwFlags :指定了获取系统进程快照的类型。
th32ProcessID :指向要检索的进程的快照的ID。 0表示要获取系统中所有进程的快照;
如果函数调用成功返回了快照句柄,否则返回INVALID_HANDLE_VALUE。 获取系统进程的快照句柄后,必须调用Process32First函数来查找系统进程快照中的第一个进程。 函数的格式如下。
BOOL Process32First (
HANDLE hSnapshot,
LPROCESSENTRY32 lppe
);
调用Process32Next函数,按以下格式列出系统中的其他进程:
BOOL Process32Next (
HANDLE hSnapshot,
LPROCESSENTRY32 lppe
);
两个函数的自变量相同。 其中hSnapshot是由CreateToolHelp32Snapshot函数返回的系统进程快照的句柄。 另一方面,lppe是指向PROCESSENTRY的结构体指针,进程的详细信息被保存在结构体中。 PROCESSENTRY32结构定义如下:
typedefstructtagprocessentry 32 {
DWORD dwSize; //结构大小
DWORD cntUsage; //此进程的引用数
DWORD th32ProcessID; //进程ID
DWORD th32DefaultHeapID; //进程默认堆ID
dword th32模块id; //进程模块ID
DWORD cntThreads; //此进程打开的线程数
DWORD th32ParentProcessID; //父进程ID
长pcpriclassbase; //线程优先级
DWORD dwFlags; //保留
char szExeFile[MAX_PATH]; //进程名称
} PROCESSENTRY32;
如果过程中枚举了这两个函数,则返回TRUE;否则返回FALSE。 枚举进程时,lppe参数会返回进程的详细信息,以便用户可以读取和输出这些进程的信息。
枚举完成后,必须调用CloseHandle函数关闭系统进程句柄。 具体代码如下。
# include stdio.h # include windows.h # include string.h # includetlhelp 32.hintgetprocess () {//PROCESSENTRY32结构,进程//用于拍摄系统进程快照的句柄handlehprocesssnap=create toolhelp 32 snapshot (th32 cs _ snap process,0 ); hprocess snap==invalid _ handle _ value ) printf (' create toolhelp 32 snapshot error. n ' ); 返回0; //首先获得第一个进程boolbprocess=process 32 first (hprocess snap,pe32 ); //所有进程while(bprocess )//进程名称和进程idprintf(%ls----%d(n ),pe32.szExeFile,pe32.th32ProcessID ) ) }closehandle(hprocesssnap ); 返回0; }int main () {GetProcess; 返回0; }
结果如下。