Windows – Win32: How to enumerate child processes

processwinapiwindows

What's the best way to enumerate the child processes of the currently running process under Win32? I can think of a couple of ways to do it, but they seem overly complicated and slow. Here's the requirements for the solution:

  1. Specifically I need to know if any there are any processes currently running which were started by the current process.
  2. Will be running on WinXP and should not require distributing special DLL's.
  3. Should not require a lot of CPU overhead (it will be running periodically in the background).
  4. I'll eventually be writing this in Delphi, but I can convert from whatever language you have the code in. Mostly I'm looking for the most efficient set of Win32 API's to use.

Thanks!

Best Answer

You could use the toolhelp API

#include <tlhelp32.h>

Process32First() 

And loop using

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;