如何枚举系统当前进程

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

如何枚举系统当前进程

编译 浙江大学 王向伟

下载源代码

首先, 调用 CreateToolhelp32Snapshot() 获得当前运行进程的快照,这个函数返回包含正在运行进程的快照句柄。其原形是:

HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);

其中:

dwFlags表示要包含在快照的内容为TH32CS_SNAPPROCESS表示在快照中包含进程列表;

th32ProcessID是进程号,为0表示当前进程。

返回值是一个句柄,如果没有进程正在运行,则返回INVALID_HANDLE_VALUE(可用GetLastError()获得),反之可用BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32

lppe);获取返回的进程

如果Process32First返回TRUE,则第一个进程的信息已经在LPPROCESSENTRY32结构中,其余进程信息可用BOOL WINAPI Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe)获得

LPPROCESSENTRY32结构的定义如下:

typedef struct tagPROCESSENTRY32 {

DWORD dwSize; //此结构的大小

DWORD cntUsage; //进程的引用数,如果为0,则次进程已停止

DWORD th32ProcessID; //进程号

ULONG_PTR th32DefaultHeapID;

DWORD th32ModuleID; //此进程引用的模块ID

DWORD cntThreads; //此进程创建的线程数

DWORD th32ParentProcessID; //父进程的ID

LONG pcPriClassBase; //这个进程创建的线程的基本优先权

DWORD dwFlags; //保留

TCHAR szExeFile[MAX_PATH];

} PROCESSENTRY32;

typedef PROCESSENTRY32 *PPROCESSENTRY32;

最后不要忘了调用:

CloseHandle();

另用函数是:

HANDLE OpenProcess(

DWORD dwDesiredAccess, // access flag

BOOL bInheritHandle, // handle inheritance option

DWORD dwProcessId // process identifier

);

用它可打开一个进程,打开进程后,可用:

BOOL TerminateProcess(

HANDLE hProcess, // handle to the process

UINT uExitCode // exit code for the process

);

来关闭进程。

笔者用上述函数做了一个类似任务管理器的进程管理器可以枚举所有进程、关闭进程。细节请参见源代码。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航