Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ShellExecute -> Rückmeldung ob Programm geöffnet oder geschlossen ist. (https://www.delphipraxis.net/175728-shellexecute-rueckmeldung-ob-programm-geoeffnet-oder-geschlossen-ist.html)

HolgerCW 12. Jul 2013 09:35

ShellExecute -> Rückmeldung ob Programm geöffnet oder geschlossen ist.
 
Hallo zusammen,

ist es möglich von einem externen Programm welches ich mit ShellExecute aufgerufen habe die Informationen zu erhalten, ob es nun geöffnet wurde, bzw. ob es wieder geschlossen wurde ?

Wenn Nein -> Gibt es da andere Möglichkeiten ?

Gruss

Holger

DeddyH 12. Jul 2013 09:45

AW: ShellExecute -> Rückmeldung ob Programm geöffnet oder geschlossen ist.
 
Willst Du auf die Beendigung warten, oder wie ist die Frage zu verstehen? ShellExecute liefert Dir zumindest entweder einen Fehlercode (im Bereich bis einschl. 32) oder das Handle der erzeugten Instanz zurück. Willst Du aber auf die Beendigung warten, musst Du auf z.B. CreateProcess oder ShellExecuteEx ausweichen.

Christian Seehase 12. Jul 2013 10:08

AW: ShellExecute -> Rückmeldung ob Programm geöffnet oder geschlossen ist.
 
Moin Detlef,

eine kleine Korrektur:
Die Funktion liefert nur einen Fehlercode (<= 32), aber kein Instanzenhandle im Erfolgsfalle.
Bei einem Rückgabewert > 32 kann man nur sagen, dass der Aufruf erfolgreich war.

DeddyH 12. Jul 2013 10:10

AW: ShellExecute -> Rückmeldung ob Programm geöffnet oder geschlossen ist.
 
Hast ja Recht, das ist nur eine Fake-Instanz zur Abwärtskompatibilität, steht aber auch so in der Hilfe:
Zitat:

If the function succeeds, it returns a value greater than 32. If the function fails, it returns an error value that indicates the cause of the failure. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however.

HolgerCW 12. Jul 2013 10:34

AW: ShellExecute -> Rückmeldung ob Programm geöffnet oder geschlossen ist.
 
Kann ich direkt nach dem ShellExecute-Aufruf den Fehlercode auslesen, da das externe Programm auch einige Zeit braucht bis es gestartet ist. Und wie genau mache ich die Abfrage ?

Die Sache mit ShellExecuteEx würde mich auch interressieren. Wie funktioniert das ? Ist danach das Delphi-Programm "eingefroren" bis das externe Programm wieder geschlossen ist ? Wie funktioniert da der Aufruf und das Abfragen der Parameter ?

MfG

Holger Wächter

DeddyH 12. Jul 2013 10:59

AW: ShellExecute -> Rückmeldung ob Programm geöffnet oder geschlossen ist.
 
ShellExecute ist ja eine Funktion, da kannst Du also direkt nach dem Aufruf den Rückgabewert abgreifen. Zu ShellExecuteEx und Warten kannst Du Dir das hier einmal anschauen. Ich bin gerade nicht sicher, aber das Programm müsste während des Wartens einfrieren, dem lässt sich aber mit den "üblichen" Mechanismen entgegenwirken (ProcessMessages, Threads etc.). Bei den Parametern verstehe ich im Moment nicht, was genau Du meinst.

Andreas L. 14. Jul 2013 13:03

AW: ShellExecute -> Rückmeldung ob Programm geöffnet oder geschlossen ist.
 
Zitat:

Zitat von HolgerCW (Beitrag 1221559)
Kann ich direkt nach dem ShellExecute-Aufruf den Fehlercode auslesen, da das externe Programm auch einige Zeit braucht bis es gestartet ist. Und wie genau mache ich die Abfrage ?

Delphi-Quellcode:
var
  ReturnValue: Integer;
begin
  ReturnValue := ShellExecute(Handle, 'open', 'explorer.exe', nil, nil, 0);
  if ReturnValue <= 32 then
    ShowMessage('Fehler mit Code ' + IntToStr(ReturnValue) + '!')
  else
   ShowMessage('ShellExec erfolgreich ausgeführt.');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz