您的位置:首页 > 其它

使用 ToolHelp32 库枚举进程

2007-12-26 15:29 477 查看
  ToolHelp32 库函数在 KERNEL32.dll 中,它们都是标准的 API 函数。但是 Windows NT 4.0 不提供这些函。
  ToolHelp32 库中有各种各样的函数可以用来枚举系统中的进程、线程以及获取内存和模块信息。其中枚举进程 只需用如下三个的函数:CreateToolhelp32Snapshot()、Process32First()和 Process32Next()。
  使用 ToolHelp32 函数的第一步是用 CreateToolhelp32Snapshot() 函数创建系统信息“快照”。这个函数可以让你选择存储在快照中的信息类型。如果你只是对进程信息感兴趣,那么只要包含 TH32CS_SNAPPROCESS 标志即可。 CreateToolhelp32Snapshot() 函数返回一个 HANDLE,完成调用之后,必须将此 HANDLE 传给 CloseHandle()。
  接下来是调用一次 Process32First 函数,从快照中获取进程列表,然后重复调用 Process32Next,直到函数返回 FALSE 为止。这样将遍历快照中进程列表。这两个函数都带两个参数,它们分别是快照句柄和一个   PROCESSENTRY32 结构。
  调用完 Process32First 或 Process32Next 之后,PROCESSENTRY32 中将包含系统中某个进程的关键信息。其中进程 ID 就存储在此结构的 th32ProcessID。此 ID 可以被传给 OpenProcess() API 以获得该进程的句柄。对应的可执行文件名及其存放路径存放在 szExeFile  结构成员中。在该结构中还可以找到其它一些有用的信息。
  注意:在调用 Process32First() 之前,一定要记住将 PROCESSENTRY32  结构的 dwSize 成员设置成 sizeof(PROCESSENTRY32)。

 

下面的代码是计算程序中“SMSS.EXE”进程的个数的代码:

void CEnumProcessDlg::OnEnumprocess()
{
 INT nCount = 0;
 HANDLE hToolHelp;
 hToolHelp = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
 PROCESSENTRY32 process32;
 process32.dwSize = sizeof(process32);
 BOOL bReturn = Process32First( hToolHelp, &process32 );
 while (bReturn)
 {
  CString strProcessName("SMSS.EXE");
  if ( strProcessName == process32.szExeFile )
  {
   nCount ++;
  }
  bReturn = Process32Next( hToolHelp, &process32 );
 }
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  api 存储 windows