![]() |
Re: Programm nach x Minuten beenden
mit
![]() ![]()
Delphi-Quellcode:
rollstuhlfahrer
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; |
Re: Programm nach x Minuten beenden
Wieso muss denn nach einem Prozess gesucht werden? Wenn die URL per ShellExecuteEx() geöffnet wurde, dann wird das process handle zurückgeliefert, genauso die Information, ob eine eigene Instanz des Browsers gestartet wurde oder nicht.
|
Re: Programm nach x Minuten beenden
Zitat:
mfg |
Re: Programm nach x Minuten beenden
Er meint, dass wenn du den PID schon kennst, ihn nicht über den Klassennamen ermitteln musst
|
Re: Programm nach x Minuten beenden
Richtig, und dann könnte man den Code aus #10 verwenden.
|
Re: Programm nach x Minuten beenden
okay ich hab wieder den Code aus #10
allerdings funktioniert nur WM_CLOSE allerdings nicht Zitat:
Die PID ändert sich doch jedes mal, oder nicht? hab testweise mal die Funktion so aufgerufen:
Delphi-Quellcode:
(funktioniert auch, aber da kann ich ja ned 3992 stehen lassen, oder?)
CloseProcessWindows(3992);
|
Re: Programm nach x Minuten beenden
Also hier nochmal die Komplettlösung:
Du ziehst eine Timer Komponente auf dein Formular, stellst den Interval im Objektinspektor auf die Millisekunden, nachdehnen es beendet werden soll ein, und in dann klickst du auf die Timer Komponente doppelt drauf und schreibst dort: Form3.Close; rein. Fals es bei dir nicht Form3 ist dann nehm einfach statt drei die Zahl deines Formulares ein. Das war jetzt eine Lösung wie du dein Programm beendest. Das mit z.B. Firefox würde ich so machen: Du schreibst folgenden Code in dein Formular:
Delphi-Quellcode:
Oben in dies Uses- Klause schreibst du dann noch ,tlhelp32 rein. In deinen Timer wo schon das FormX.close drinnensteht schreibst du dann noch KillTast('firefox.exe'); rein und dieser wird dann mit deinem Programm nach der angegebenen Zeit beendet.
function KillTask(ExeFileName: string): integer;
const PROCESS_TERMINATE=$0001; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin result := 0; FSnapshotHandle := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := Sizeof(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess(OpenProcess( PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end; Sonst noch Fragen^^ MFG Lars Wiltfang |
Re: Programm nach x Minuten beenden
Er startet aber Firefox und kennt deshalb dessen PID! Dein Code schliesst auch eine eventuell andere Firefox-Instanz
|
Re: Programm nach x Minuten beenden
Das hab ich in #20 ja bereits angedeutet.
|
Re: Programm nach x Minuten beenden
Ich weiss; es gibt aber andere die den thread wohl nicht ganz gelesen haben
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz