Datei mit zugeordneter Anwendung öffnen |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 27.04.2011 |
Mit ShellExecute können Dateien geöffnet werden. Dabei wird die Anwendung verwendet, die mit dem jeweiligen Dateityp verknüpft ist. Das Öffnen einer Datei mit der Endung *.doc öffnet z.B. Word. Es passiert also das gleiche wie bei einem Doppelklick auf eine Datei im Explorer. ShellExecute ist auch in der Lage, Verknüpfungen auszuführen (*.lnk). Und natürlich funktioniert das auch mit Dateien, die sich selbst ausführen können (*.exe).
Hier ein Beispiel:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ShellExecute(Application.Handle,
'open',
PChar('C:\meintext.doc'),
nil, nil, SW_NORMAL) <= 32 then
ShowMessage('Es ist ein Fehler aufgetreten');
end;
Um ShellExecute aufzurufen, muss die Unit ShellApi der Uses-Klausel hinzugefügt werden.
ShellExecute benötigt eine Reihe an Parametern. In obigem Beispiel ist zu sehen, dass die Datei "meintext.doc" geöffnet werden soll. Die Parameter bedeuten dabei folgendes:
- Handle des Eigentümerfensters (im Beispiel: Application.Handle): Dieses Fenster ist dafür zuständig, evtl. Fehlermeldungen anzuzeigen. Der Wert kann auch nil sein.
- Aktion (im Beispiel: 'open'): Hier muss einer dieser Strings angegeben werden: edit, explore, find, open, print. Was bei der jeweiligen Aktion passiert, bestimmt die verknüpfte Anwendung. "open" funktioniert immer.
- Dateiname (im Beispiel: PChar('C:\meintext.doc')): Der Dateiname - mit Pfad - der Datei, auf der obige Aktion ausgeführt werden soll. Da es sich bei ShellExecute um eine Windows-interne Funktion handelt, muss der String als nullterminierter String übergeben werden. Das erreicht man z.B. durch das Casten nach PChar, wie im Beispiel zu sehen.
- Aufrufparameter (im Beispiel: nil): Hier kann ein String mit Parametern mitgegeben, die bei der Ausführung verwendet werden sollen.
- Arbeitsverzeichnis (im Beispiel: nil): Angabe eines Arbeitsverzeichnisses, von dem aus die obige Datei ausgeführt werden soll. Es muss sich um einen absoluten Pfad handeln. Ist der Wert nil, wird das aktuelle Arbeitsverzeichnis verwendet.
- Anzeigeform des Fensters (im Beispiel: SW_NORMAL): Konstante, die angibt, in welcher Größe das Anwendungsfenster angezeigt werden soll (Beispielwerte: SW_HIDE, SW_MAXIMIZE, SW_MINIMIZE, SW_SHOWNORMAL)
ShellExecute hat außerdem einen Rückgabewert, der genau beschreibt, ob alles funktioniert hat. Im Beispiel prüfen wir auf <=32, weil die Fehlercodes alle kleiner oder gleich 32 sind. Mit Hilfe folgender Funktion kann ein passender Fehlertext ausgegeben werden:
//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 muss 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;
- Programm ohne sichtbares Fenster starten
- Größe einer Datei ermitteln
- Feststellen, ob eine Datei existiert
- Erstellungsdatum von Dateien ermitteln
- Letzten Dateizugriff ermitteln
- Ist eine Datei in Benutzung
- Dateiversion ermitteln
- Datei nach einem bestimmten String durchsuchen
- Anwendung ermitteln, die mit einer Dateiendung verknüpft ist
- Dateidatum ändern