如何枚举系统当前进程

首先, 调用 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
);      

来关闭进程。

笔者用上述函数做了一个类似任务管理器的进程管理器可以枚举所有进程、关闭进程

转载于:https://www.cnblogs.com/rogee/archive/2011/03/31/2000499.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值