Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi warten bis ShellExecute beendet ist (https://www.delphipraxis.net/27717-warten-bis-shellexecute-beendet-ist.html)

eddy 14. Aug 2004 16:10


warten bis ShellExecute beendet ist
 
Hallo Leute,

ich hab' mal wieder ein Problem.

In meinem Programm wird während der Laufzeit
Code:
ShellExecute(Handle, nil, PChar('c:\programme\winrar\winrar.exe'), PChar(parameter), nil, SW_SHOW);
ausgeführt, wenn eine im Archiv vorhandene Datei zur Bearbeitung nicht gefunden wird.
Danach wird auf eine Datei, die im Archiv enthalten sein sollte zugegriffen.

Funktioniert im Einzelschrittmodus alles bestens.

Beim Starten des entsprechenden Programmpunktes (ohne Einzelschrittmodus) erhalte ich an der Stelle
Code:
    AssignFile(f, path+file);
    Reset(f);
    if IOResult <> 0 then begin
      // melde Fehler
ein IOResult von 2, weil die entsprechende Datei ja noch gar nicht entpackt ist. ShellExecute läuft zu diesem Zeitpunkt noch.

Wie kann ich feststellen, ob das mit ShellExecute ausgeführte Programm beendet wurde, um solange
zu pausieren, bis der gestartete Vorgang beendet ist?

mfg
eddy

eddy 14. Aug 2004 16:24

Re: warten bis ShellExecute beendet ist
 
Hallo Leute,

habe die Antwort doch noch gefunden: DP-Link

bzw. dann hier.


Muß niemand weiter suchen und sich mühen!


mfg
eddy

APP 14. Aug 2004 16:25

Re: warten bis ShellExecute beendet ist
 
Hallo eddy,
das Warten bis ein Prozess beendet wurde funkt nur mit Hier im Forum suchenCreateProcess oder mit ShellExecuteEx:

Anbei ein Beispliel mit ShellExecuteEx:
Delphi-Quellcode:
{******************************************************************************}
FUNCTION StartAndWait(CONST ExecuteFile, ParamString: STRING): boolean;
//http://delphi.about.com/library/weekly/aa040803a.htm
{******************************************************************************}
VAR
  SEInfo                          : TShellExecuteInfo;
  ExitCode                        : DWORD;
BEGIN
  Result := False;
  IF NOT FileExists(ExecuteFile) THEN Exit;
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  WITH SEInfo DO
    BEGIN
      fMask := SEE_MASK_NOCLOSEPROCESS;
      Wnd := Application.Handle;
      lpFile := PChar(ExecuteFile);
      lpParameters := PChar(ParamString);
      nShow := SW_SHOWNORMAL;
    END;
  IF ShellExecuteEx(@SEInfo) THEN
    BEGIN
      REPEAT
        Application.ProcessMessages;
        // Damit die Prozessorauslastung sinkt :-)
        Sleep(100);
        GetExitCodeProcess(SEInfo.hProcess, ExitCode);
      UNTIL (ExitCode <> STILL_ACTIVE) OR Application.Terminated;
      Result := True;
    END;
END;

eddy 14. Aug 2004 16:39

Re: warten bis ShellExecute beendet ist
 
Hallo Armin,

da hab' ich ja Glück gehabt, daß sich Deine Antwort mit meiner "Gefunden-Meldung" überschnitten hat.

Deine Variante gefällt mir persönlich besser und funktioniert bestens.

mfg
eddy


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 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