AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Probleme mit Try Ecxept und ShellExecute
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Try Ecxept und ShellExecute

Ein Thema von derzwent · begonnen am 30. Dez 2005 · letzter Beitrag vom 30. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
derzwent

Registriert seit: 8. Apr 2005
Ort: Beierfeld
10 Beiträge
 
#1

Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 13:02
Hallo allerseits,
habe da folgendes Problem: Ich möchte meine Programme (in diesem Fall Thunderbird und Firefox) über
jeweils eine Checkbox auswählen und durch ButtonClick öffnen.
Da aber das Thunderbird in einer mit TrueCrypt verschlüsselten Festplatte (Drive X) liegt, muß ich diese zuvor mit TrueCrypt mounten.
Mit Try Ecxept möchte ich nun erreichen, daß sich Thunderbird sofort öffnet, falls 'X' schon gemountet ist. Wenn 'X' allerdings nicht gemountet ist, soll sich TrueCrypt öffnen und nach dem mounten dann Thunderbird.

Hier nun mein Quellcode:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

begin
        if
         CheckBox1.Checked then
          shellexecute (handle, 'open', 'C:\Programme\Mozilla Firefox\Firefox.exe', nil, nil, sw_shownormal);

        if
         CheckBox2.Checked then
         begin
          try
           shellexecute (handle, 'open', 'X:\Thunderbird\Thunderbird.exe', nil, nil, sw_shownormal);
          except
           shellexecute (handle, 'open', 'C:\Programme\TrueCrypt\TrueCrypt.exe', nil, nil, sw_shownormal);
          end;
         end;
Ich hoffe ihr könnt mir da mal helfen.
Danke schonmal.
P.S. Bin noch blutigster Anfänger!

[edit=Sharky]Quoting-Tags durch Delphi-Tags ersetzt. Mfg, Sharky[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 13:06
Shellexecute wirft, wie jede API Funktion keine Exception:
Zitat:
Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below.
Näheres dazu im MSDN: MSDN-Library durchsuchenShellexecute.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 13:10
Das Problem liegt wohl darin, dass ShellExecute (ja das schreibt man so, in C/C++/C#/Java wärst du aufgeschmissen mit der Kleinschreibnung) keine Exception wirft, wenn das Programm nicht gestartet wurde, sondern im Fehlerfall einen Wert kleiner als 32 zurückliefert, den du auswerten musst (mehr Infos siehe Win32API Hilfe). Das try/except ist hier also unnötig, da es hier nichts bringt.
  Mit Zitat antworten Zitat
derzwent

Registriert seit: 8. Apr 2005
Ort: Beierfeld
10 Beiträge
 
#4

Re: Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 13:14
Wie kann ich das Problem denn lösen?
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#5

Re: Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 13:23
Zitat:
Wie kann ich das Problem denn lösen?
Zitat:
...sondern im Fehlerfall einen Wert kleiner als 32 zurückliefert, den du auswerten musst...
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 13:59
sollte in etwa so gehen ...

Delphi-Quellcode:
begin
  {$I-}
     shellexecute (handle, 'open', 'X:\Thunderbird\Thunderbird.exe', nil, nil, sw_shownormal);
  {$I+}
  if IOResult <= 32 then
    begin
      shellexecute (handle, 'open', 'C:\Programme\TrueCrypt\TrueCrypt.exe', nil, nil, sw_shownormal);

    end

end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 14:02
Es gibt im Prinzip zwei möglichkeiten:
1. Du überprüfst, ob die Datei existiert (file_exists('X:\Thunderbird\Thunderbird.exe')) oder
2. Du fragst den Wert, der per ShellExecute zurückgegeben wird ab, und wertest diesen aus. Ist er kleiner oder gleich 32, so gabs nen fehler.

Ich würde die 1. Methode bevorzugen.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#8

Re: Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 16:57
Delphi-Quellcode:
if (ShellExecute(...) <= 32) then
  RaiseLastOSError;
für eine Standard-Meldung.
Alternativ kann der Fehler auch mit "case ShellExecute of ..." ausgewertet werden.

Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
PierreB
(Gast)

n/a Beiträge
 
#9

Re: Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 17:08
Zitat:
Die Funktion ShellExecute gibt bestimmte ErrorCodes zurück, wenn beim Starten der Anwendung Fehler auftreten. Diese Liste gibt eine Übersicht der möglichen Fehlerquellen und gibt verständliche Fehlermeldungen zurück. Als Parameter muss der ErrorCode übergeben werden
Delphi-Quellcode:
Function ShellExecuteErrMessage(int_Code: INTEGER): STRING;
 //Gibt die passenede Fehlermeldung zum ShellExecute Fehlercode zurück
Begin
  CASE int_code OF
     0: result := 'Zuwenig Speicher, ausführbare Datei war zerstört, Relokationswerte waren ungültig';
     2: result := 'Datei wurde nicht gefunden.';
     3: result := 'Verzeichnis wurde nicht gefunden.';
     5: result := 'Fehler beim gemeinsamen Zugriff auf eine Datei im Netz oder Fehler beim Zugriff auf eine gesperrte Datei im Netz.';
     6: result := 'Bibliothek forderte separate Datensegmente für jede Task an.';
     8: result := 'Zuwenig Speicher, um die Anwendung zu starten.';
    10: result := 'Falsche Windows-Version.';
    11: result := 'Ungültige ausführbare Datei. Entweder keine Windows-Anwendung oder Fehler in der EXE-Datei.';
    12: result := 'Anwendung für ein anderes Betriebssystem.';
    13: result := 'Anwendung für MS-DOS 4.0.';
    14: result := 'Typ der ausführbaren Datei unbekannt.';
    15: result := 'Versuch, eine Real-Mode-Anwendung (für eine frühere Windows-Version) zu laden.';
    16: result := 'Versuch, eine zweite Instanz einer ausführbaren Datei mit mehreren Datensegmenten die nicht als nur lesbar gekennzeichnet waren, zu laden.';
    19: result := 'Versuch, eine komprimierte ausführbare Datei zu laden.' + #13 + 'Die Datei muß dekomprimiert werden, bevor sie geladen werden kann.';
    20: result := 'Ungültige dynamische Linkbibliothek (DLL).' + #13 + 'Eine der DLLs, die benötigt wurde, um die Anwendung auszuführen, war beschädigt.';
  ELSE
    result := 'Ein Unbekannter Fehler ist aufgetreten. (' + IntToStr(int_code) + ')';
  END;
End;
So könnte man die Funktion aufrufen:
Delphi-Quellcode:
uses ShellApi;

procedure TForm1.FormCreate(Sender: TObject);
var
  Err: Integer;
begin
  Err:= ShellExecute(0,
               Nil,
               PChar('C:\Programm.exe'),
               Pchar('-Parameter'),
               Pchar('C:\StartDir'),
               SW_NORMAL);
  if Err<>0 then
    Showmessage(ShellExecuteErrMessage(Err));
end;
Quelle: Easy Delphi Helper
Vielleicht hilft es dir ja bei der Auswertung.
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Probleme mit Try Ecxept und ShellExecute

  Alt 30. Dez 2005, 17:45
@Pierre's Code:
Ich verstehe da zwei Dinge nicht ganz:
1. Wenn der Befehl funktioniert hat, dann ist der Wert doch größer 32. Dein Code gibt aber in diesem Fall einen unbekannten Fehler aus.

2. Wieso überprüfst du im Anwendungsbeispiel, ob der Fehler ungleich 0 ist? Das wäre ja laut deinem anderem Code "zu wenig Speicher"?

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 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