![]() |
Probleme mit Try Ecxept und ShellExecute
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:
Ich hoffe ihr könnt mir da mal helfen.
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; Danke schonmal. P.S. Bin noch blutigster Anfänger! :pale: [edit=Sharky]Quoting-Tags durch Delphi-Tags ersetzt. Mfg, Sharky[/edit] |
Re: Probleme mit Try Ecxept und ShellExecute
Shellexecute wirft, wie jede API Funktion keine Exception:
Zitat:
![]() |
Re: Probleme mit Try Ecxept und ShellExecute
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.
|
Re: Probleme mit Try Ecxept und ShellExecute
Wie kann ich das Problem denn lösen?
|
Re: Probleme mit Try Ecxept und ShellExecute
Zitat:
Zitat:
|
Re: Probleme mit Try Ecxept und ShellExecute
sollte in etwa so gehen ...
Delphi-Quellcode:
Grüße
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; Klaus |
Re: Probleme mit Try Ecxept und ShellExecute
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 |
Re: Probleme mit Try Ecxept und ShellExecute
Delphi-Quellcode:
für eine Standard-Meldung.
if (ShellExecute(...) <= 32) then
RaiseLastOSError; Alternativ kann der Fehler auch mit "case ShellExecute of ..." ausgewertet werden. Gruß, ManuMF |
Re: Probleme mit Try Ecxept und ShellExecute
Zitat:
![]() Vielleicht hilft es dir ja bei der Auswertung. ;) |
Re: Probleme mit Try Ecxept und ShellExecute
@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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:21 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