mit
ProcessFirst ProcessNext kann man ermitteln, welche Kindprozesse es gibt (Prozesse, die von deinem Programmm aus gestartet wurden. Dabei bekommt man aber dann kein Fensterhandle, sondern gleich eine PID.
Delphi-Quellcode:
uses TlHelp32;
type TProcessIds = array of DWORD;
function GetChildrenProcessesID(ParentProcessId: DWORD): TProcessIds;
var
hProcSnap: THandle;
pe32: TProcessEntry32;
begin
Result := nil;
hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
if hProcSnap <> INVALID_HANDLE_VALUE then
begin
pe32.dwSize := SizeOf(ProcessEntry32);
if Process32First(hProcSnap, pe32) = true then
begin
while Process32Next(hProcSnap, pe32) = true do
begin
if pe32.th32ParentProcessID = ParentProcessId then
begin
SetLength(Result, Length(Result) + 1);
Result[Length(Result) - 1] := pe32.th32ProcessID;
end;
end;
end;
CloseHandle(hProcSnap);
end;
end;
// Aufruf
procedure TForm1.Button3Click(Sender: TObject);
var Children: TProcessIds;
i: integer;
begin
ListBox1.Clear;
Children := GetChildrenProcessesID(GetCurrentProcessId); // Eigene Kinder finden
for i := 0 to Length(Children) - 1 do
ListBox1.Items.Add(IntToStr(Children[i]));
end;
rollstuhlfahrer