Entwickler-Ecke

Windows API - Überprüfen ob ShellExecute den Prozess gestartet hat


Kuyatzu - Fr 21.09.07 22:56
Titel: Überprüfen ob ShellExecute den Prozess gestartet hat
Hi Leute

Ich weiß nicht wie ich das hinbekomme das überprüft wird ob ShellExecute das Programm gestartet hat
und bei true/bzw. false eine andere Option folgt.


BenBE - Fr 21.09.07 23:03

Wie jede API sollte Dir Suche im MSDN SHELLEXECUTE entweder True\False als Result liefern, ODER den Status über Suche im MSDN GETLASTERROR zurückmelden.


bms - Sa 22.09.07 01:20

user profile iconBenBE hat folgendes geschrieben:
Wie jede API sollte Dir Suche im MSDN SHELLEXECUTE entweder True\False als Result liefern, ODER den Status über Suche im MSDN GETLASTERROR zurückmelden.


ShelleExecute gibt dir zwar ein Wert zurück, und, falls es <= 32 ist, dann ist es ein Fehlercode, aber kein Wert <= 32 bedeutet nicht automatisch, daß das Programm erfolgreich gestartet wurde. Allerdings ist Wert <= 32 auf jeden Fall ein Zeichen dafür, daß es nicht geklappt hat.


Kuyatzu - Sa 22.09.07 08:30

Danke :wink: :wink: :wink:
Das ist schon sehr hilfreich und danke für die schnelle Antwort.
Hab aber doch noch ein Problem und zwar weiß ich nicht wie man das den macht mit
result usw.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0, 'open','yxz.exe', nil, nil,  SW_SHOW);
//hir muss ja der "result" hin weiß aber nicht wie man das macht
//das wenn ShellExecute nicht geklapt hat
//das den ShowMessage gezeigt wird
ShowMessage('"yxz.exe" nicht gefunden.Bitte überprüfen sie den Pfad');
end;


Timosch - Sa 22.09.07 10:35

Ähm, ShellExecute ist eine Funktion. Also:

Delphi-Quelltext
1:
a:=ShellExecute(...);                    

Und in a ist dann der Result-Wert von ShellExecute.


Narses - Sa 22.09.07 10:47

Moin!

Wie wäre es denn, wenn du erstmal separat überprüfst, ob die Anwendung existiert? Dann kannst du diesen Fall schonmal ausschließen und ganz sicher sein: :idea:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if FileExists('yxz.exe') then begin
    if (ShellExecute(0, 'open', 'yxz.exe', nil, nil,  SW_SHOW) <= 32) then
      ShowMessage('Fehler beim Start von "yxz.exe"!');
  end
  else
    ShowMessage('"yxz.exe" nicht gefunden. Bitte überprüfen sie den Pfad');
end;

cu
Narses


Heiko - Sa 22.09.07 10:55

Hallo Narses, dass ist unnötiger Aufwand. Wenn ShellExecute [http://msdn2.microsoft.com/en-us/library/ms647732.aspx] es nicht findet, dann gibt das einen entsprechenden Fehlercode zurück (siehe MSDN-link).


Kuyatzu - Sa 22.09.07 13:25

danke das ist gut damit ist das Problem gelöst.
habt ihr auch eine zweite oder dritte Meinung zu meinem anderen Problem ??

http://www.delphi-forum.de/viewtopic.php?t=76581