![]() |
RunAndWait in For-Schleife
Hallo,
habe folgendes Problem zu später Stunde (naja ist ja Wochenende!): ich habe mir hier im Forum die Prozedur RunAndWaitShell() gefunden und direkt eingebaut, allerdings in eine For-Schleife. Jetzt habe ich das Problem, dass das Programm die erste Datei nicht öffnet und nicht mehr Reagiert. Gibt es da andere Möglichkeiten, in Schleifen (jeder Art) Programme Aufzurufen und erst dann die Schleife weiterlaufen zu lassen, wenn das Programm beendet wurde? Gruß kabuco |
Re: RunAndWait in For-Schleife
Du könntest CreateProcess nehmen und warden bis der andere Prozess bereit ist oder wieder beendet.
|
Re: RunAndWait in For-Schleife
Moin Zusammen,
alternativ zu CreateProcess ginge auch ShellExecuteEx. [EDIT] Wenn ich mir allerdings anschaue, dass die Funktion RunAndWaitShell heisst, wird sie wohl eine der beiden Funktionen verwenden. @Kabuco: Die Funktion wird doch bestimmt einen Rückgabewert haben, oder einen Parameter der das gewünschte macht. [/EDIT] |
Re: RunAndWait in For-Schleife
Hallo,
hier die Funktion, die ich verwende:
Delphi-Quellcode:
Wie zu sehen ist, hat die Funktion keinen Rückgabewert. Man könnte aber einen einbauen, nur weiß ich jetzt leider nicht, wo ich den Rückgabewert setzen muss!?
procedure TForm6.RunAndWaitShell(Executable, Parameter: STRING; ShowParameter: INTEGER);
var Info: TShellExecuteInfo; pInfo: PShellExecuteInfo; exitCode: DWord; begin {Pointer to Info} pInfo := @Info; {Fill info} with Info do begin cbSize := SizeOf(Info); fMask := SEE_MASK_NOCLOSEPROCESS; wnd := application.Handle; lpVerb := NIL; lpFile := PChar(Executable); {Parametros al ejecutable} {Executable parameters} lpParameters := PChar(Parameter + #0); lpDirectory := NIL; nShow := ShowParameter; hInstApp := 0; end; {Execute} ShellExecuteEx(pInfo); {Wait to finish} repeat exitCode := WaitForSingleObject(Info.hProcess, 500); Application.ProcessMessages; until (exitCode <> WAIT_TIMEOUT); end; gruß kabuco |
Re: RunAndWait in For-Schleife
Moin Florian,
da dürfte Dein Programm eigentlich nicht hängen bleiben. Dass es in der Zeile stehenbleibt wäre normal, da die Funktion erst zurückkehrt, nachdem das externe Programm beendet wurde. Geh' doch mal im Einzelschritt da durch. Ggf. kannst Du Dir mal den Rückgabewert von ShellExecuteEx ansehen. Ist der false, kannst Du Dir mit
Delphi-Quellcode:
mal ansehen, was schiefgegangen ist.
ShowMessage(SysErrorMessage(GetLastError));
|
Re: RunAndWait in For-Schleife
Hallo,
habe mein Problem gelöst indem ich den Prozeduraufruf einfach in eine repeat...until schleife gesteckt habe. Die Schleife wird mit einer Zählervariablen gesteuert. Im Prinzip genau wie in der For-Schleife! Weis auch nicht, warum das jetzt funktioniert. Naja, Hauptsache es funktioniert! Gruß kabuco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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 by Thomas Breitkreuz