Win32:如何枚举subprocess?

在Win32下枚举当前正在运行的进程的subprocess的最好方法是什么? 我可以想到一些方法来做到这一点,但他们似乎过于复杂和缓慢。 以下是解决scheme的要求:

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

谢谢!

你可以使用toolhelp API

#include <tlhelp32.h> Process32First() 

并循环使用

 Process32Next() 

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

编辑德尔福

 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;