Código Delphi
[-]program Project1;
uses Windows, tlhelp32;
var
si: TStartupInfo = (cb: SizeOf(si));
pi: TProcessInformation;
hSnapshot, hProcess: Cardinal;
pe: TProcessEntry32 = (dwSize: SizeOf(pe));
begin
CreateProcess(nil, 'explorer.exe c:\windows', nil, nil, False, 0, nil, nil, si, pi);
WaitForSingleObject(pi.hProcess, INFINITE);
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(hSnapshot, pe) then
repeat
if pe.th32ParentProcessID = pi.dwProcessId then
begin
hProcess := OpenProcess(SYNCHRONIZE, False, pe.th32ProcessID);
if LongBool(hProcess) then
begin
WaitForSingleObject(hProcess, INFINITE);
CloseHandle(hProcess);
end;
end;
until not Process32Next(hSnapshot, pe);
CloseHandle(hSnapshot);
end.
Nota; Tal vez para abrir algunos procesos "hijos" requieras habilitar el privilegio
SeDebugPrivilege de tu proceso. También es aconsejable revises el ejemplo para poder revisar a los procesos hijos de los procesos hijos (procesos nietos y bisnietos del primero).
Saludos