Einzelnen Beitrag anzeigen

Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#21

Re: Programm nach x Minuten beenden

  Alt 4. Mai 2008, 08:09
mit MSDN-Library durchsuchenProcessFirst MSDN-Library durchsuchenProcessNext 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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat