Win32:如何枚举子进程?

时间:2010-01-20 08:12:45

标签: windows winapi process

在Win32下枚举当前正在运行的进程的子进程的最佳方法是什么?我可以想到几种方法,但它们看起来过于复杂和缓慢。以下是解决方案的要求:

  1. 具体来说,我需要知道当前正在运行哪些进程是由当前进程启动的。
  2. 将在WinXP上运行,不应要求分发特殊的DLL。
  3. 不应该需要大量的CPU开销(它将在后台定期运行)。
  4. 我最终会在Delphi中编写这个,但我可以使用你拥有代码的任何语言进行转换。大多数情况下,我正在寻找最有效的Win32 API集。
  5. 谢谢!

1 个答案:

答案 0 :(得分:4)

您可以使用toolhelp API

#include <tlhelp32.h>

Process32First() 

使用

循环
Process32Next()

http://www.codeproject.com/KB/threads/processes.aspx

EDIT delphi

uses tlhelp32;

procedure FillAppList(Applist: Tstrings); 
var   Snap:THandle; 
        ProcessE:TProcessEntry32; 
begin 
     Applist.Clear; 
     Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
     ProcessE.dwSize:=SizeOf(ProcessE); 
     if Process32First(Snap,ProcessE) then 
     begin 
          Applist.Add(string(ProcessE.szExeFile)); 
          while Process32Next(Snap,ProcessE) do 
                 .. compare parent id
      end 
      CloseHandle(Snap); 
end;