Beliebige Dateitypen mit dBASE öffnen lassen

Manchmal ist es nötig oder hilfreich, direkt aus einem dBASE-Programm heraus eine andere Datei mit ihrem jeweiligen Programm zu öffnen. Beispielsweise eine pdf-Datei mit dem Acrobat Reader oder einen Brief mit Word etc. Das geht mit dBASE ganz einfach.

Die einzige Voraussetzung ist, dass die Endung der jeweiligen Datei unter Windows mit einem Programm verknüpft ist, welches standardmässig gestartet wird um Dateien dieses Typs anzuzeigen. Dann brauchen Sie nicht mal mehr wissen wie das Programm heisst das diese Datei öffnet, geschweige denn wo es installiert ist. Sie rufen einfach nur die Datei mit der entsprechenden Endung auf und um den Rest kümmert sich Windows.

Vorab noch: eine Verknüpfung zwischen einer Dateiendung und einem Programm können Sie bei Bedarf für jede beliebige Dateiart bzw. Dateiendung selbst anlegen. Bei XP geht das noch einfach direkt im Windows-Explorer und dort im Menü Extras – Ordneroptionen – Dateitypen. Bei Windows7 (und vermutlich auch bei Vista, das haben wir uns nie angetan …) ist es dagegen gut versteckt unter Systemsteuerung – Programme – Standardprogramme.

Damit genügen ein paar simple dBASE-Befehle um beliebige externe Dateien mitsamt ihren Programmen zu starten. Alle Varianten funktionieren direkt im Befehlsfenster, in prg- oder wfm-Dateien und natürlich auch in mit dBASE Plus compilierten exe-Programmen.

1. RUN-Befehl:

run datei.pdf
run “langer dateiname.pdf”
run “c:\dahin\dorthin\auftrag.pdf”

Schreiben Sie den gesamten Dateinamen in “”, wenn es sich um einen langen Namen (länger als 8 Zeichen) handelt, oder wenn er für Dateinamen kritische Zeichen enthält, zu denen auch das Leerzeichen gehört. Wenn Sie also z. B. den unsäglichen Windows Verzeichnis-Irrgarten “c:\eigene dateien” verwenden und dort Dateien aufrufen müssen Sie alles in “” schreiben.

2. RUN-Funktion:

run ( datei.pdf, .t. )
run ( “langer dateiname.pdf”, .t. )

Der zweite Parameter sollte .t. sein wenn das autom. für die jeweilige Datei verwendete Programm ein Windows-Programm ist, und .f. wenn es ein DOS-Programm ist. Die Betonung liegt auf sollte, denn in der Praxis hat dieser Parameter in den meisten Fällen keine (erkennbare) Auswirkung mehr. Wenn es nicht klappt versuchen Sie einfach beide.

Für lange Dateinamen und Sonderzeichen gilt wieder dasselbe, bitte stets in “” schreiben.

Beide obigen Varianten haben den Nachteil, dass sich meist auch noch ein DOS-Command Fenster öffnet. Das verschwindet zwar autom. wieder, doch schön ist es nicht und es könnte den Anwender unnötig irritieren. Ausserdem ist dieser Weg per run ein wenig “oldfashioned”, moderner und zudem auch schneller gehts per Windows-API.

3. Windows-API:

Dazu können Sie die interne Windows-Routine ShellExecute verwenden. Diese muss jedoch erst einmal per extern verfügbar gemacht werden, danach kann sie wie eine ganz normale dBASE-Funktion aufgerufen werden. Sie brauchen jetzt also mind. zwei Befehle zum Aufruf der fremden Datei. Die erste Befehl sieht so aus:

extern CHANDLE ShellExecute ( CHANDLE, CSTRING, CSTRING, CSTRING, CSTRING, CINT) shell32 from “ShellExecuteA”

Obiges ist _ein_ Befehl, also bitte alles in _einer_ Befehlszeile schreiben.

Das war die Vorarbeit, welche immer nur einmal nötig ist. Es genügt also, obigen extern-Befehl einmal beim Start Ihres dBASE-Programms auszuführen, danach können Sie ShellExecutebeliebig oft verwenden, z. B. so:

ShellExecute ( _app.framewin.hwnd, “open”, “datei.pdf”, NULL, “”, 1 )

Es führt hier viel zu weit zu erklären, was CHANDLE und CSTRING etc. sind und wie das alles techn. abläuft. Es funktioniert, das soll an dieser Stelle genügen. Wenn Sie mehr über die Windows-API wissen wollen empfehle ich Ihnen “Windows Programming” von Charles Petzold, die API-Bibel schlechthin, satte 1.350 Seiten und das ist nur der erste Einstieg …

Die Funktion ShellExecute bekommt einige Parameter, z. B. das sog. Handle Ihres dBASE-Programms, das stets über _app.framewin.hwnd abrufbar ist. Dann das Kommando “open”, gefolgt vom Namen der zu öffnenden Datei, der hier immer in “” stehen muss, egal wie lang oder kurz er ist. Danach ein Parameter NULL und noch ein Leerstring “”, sowie zum Schluss eine Zahl. Diese Zahl steuert, wie und in welcher Grösse das Fenster des zu startenden Programms angezeigt werden soll (1 = normal, 2 = minimiert, 3 = maximiert). Allerdings hält sich nicht jedes Programm an diese Vorgabe der Startgrösse und es gibt leider immer wieder Programme, die z. B. reichlich selbstherrlich immer im Vollbild-Modus starten.

Interessant ist übrigens auch noch der Rückgabewert von ShellExecute. Werte bis 32 sind ein Windows-interner Fehlercode, dann ging irgendwas schief. Werte grösser 32 sind dagegen Erfolgsmeldungen, egal wie die Zahl dann tatsächlich lautet. Sehr oft ist diese Rückgabe übrigens 42, vielleicht war der Microsoft-Programmierer ja ein Fan von Douglas Adams …

(Stand dieser Info: 2013)