Win32:如何枚举子进程?

Sco*_*ger 5 windows winapi process

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

  1. 具体来说,我需要知道是否有任何当前正在运行的进程正在由当前进程启动。
  2. 将在WinXP上运行,并且不需要分发特殊的DLL。
  3. 应该不需要太多的CPU开销(它将在后台定期运行)。
  4. 我最终将用Delphi编写此代码,但是我可以从您使用代码的任何语言进行转换。通常,我正在寻找要使用的最有效的Win32 API集。

谢谢!

sta*_*ker 5

您可以使用toolhelp API

#include <tlhelp32.h>

Process32First() 
Run Code Online (Sandbox Code Playgroud)

并循环使用

Process32Next()
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)