![]() |
Schleife in Delphi
Hallo liebes Forum für mein Projekt brauche ich eine Schleife welche überprüft ob ein Prozess aktiv ist. Sobald der Prozess inaktiv ist soll das Programm eine ANDERE exe ausführen.
Ein Funktion für die Prozessüberwachung habe ich schon. Alleridngs habe ich keine Idee für die Schleife. Im Moment fällt mir nur eine Endlosschelife ein, damit hängt sich aber das Programm logischerweise auf und öffnet die exe tausende male Hier mein Ansatz:
Delphi-Quellcode:
Wie würde ihr das machen sodass die Prozesse nur solange gescannt werden bis ein Prozess beendet wurde?
while True do
if processExists('box.exe') then ShowMessage('AKTIV') else ShellExecute(0,'open', PChar('U:\Programme\box\delete.exe'), nil, nil, SW_HIDE); Grüße |
AW: Schleife in Delphi
Wie wär's mit
Delphi-Quellcode:
Geht natürlich auch mit fußgesteuerter Schleife, also z.B.
while processExists('box.exe') do begin
Sleep(500); end; ShellExecute(0,'open', PChar('U:\Programme\box\delete.exe'), nil, nil, SW_HIDE);
Delphi-Quellcode:
.
repeat [...] until NOT processExists(...)
Ich vermute aber, dass du das im Hintergrund machen willst. Dafür würde sich vielleicht ein Timer anbieten. Grüße Dalai |
AW: Schleife in Delphi
Perfekt deine erste Lösung hat mir gereicht. Nur dein sleep hab ich durch ein Delay getauscht. Für delay hab ich eine eigene Unit gemacht. Damit macht das Programm zwar eine 'Pause' allerdings läuft es im Hintergrund.
Vielen Dank für die Hilfe. Grüße |
AW: Schleife in Delphi
Wenn du deine "box.exe" selbst startest, könntest du auch mit WaitForSingleObject arbeiten
Delphi-Quellcode:
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PDWORD): Longword;
var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; StartupInfo.wShowWindow := ShowCmd; if not CreateProcess(nil, @Filename[1], nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then Result := WAIT_FAILED else begin if wait = FALSE then begin if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId; exit; end; WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, Result); end; if ProcessInfo.hProcess <> 0 then CloseHandle(ProcessInfo.hProcess); if ProcessInfo.hThread <> 0 then CloseHandle(ProcessInfo.hThread); end; |
AW: Schleife in Delphi
Danke für den Tipp,
alleridngs starte ich die exe nicht selbst. Das läuft über einen automatisierten Vorgang und dieser startet die exe alle 30 Minuten. Gruß |
AW: Schleife in Delphi
Zitat:
![]() ...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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