Bei Datei-Verknüpfungen können Sie angeben, welches Verzeichnis zu Beginn der Ausführung der gestarteten Anwendung das aktuelle Verzeichnis sein soll ("Ausführen in..."). Beim Start einer Anwendung über die Shell-Funktion haben Sie jedoch keine Möglichkeit, ein solches aktuelles Verzeichnis für die Anwendung anzugeben. Es ist vielmehr immer automatisch das gerade aktuelle Verzeichnis Ihrer eigenen Anwendung (CurDir).
In dieser gerade getätigten Aussage steckt jedoch bereits die Lösung, wie Sie einer per Shell zu startenden Anwendung ein aktuelles Verzeichnis vorgeben können. Sie brauchen nämlich nur das aktuelle Verzeichnis Ihrer eigenen Anwendung mit ChDrive und ChDir auf das gewünschte Verzeichnis zu setzen. Nach dem Aufruf der Shell-Funktion setzen Sie es einfach wieder auf den vorherigen Zustand zurück.
Die folgende Funktion ShellIn erweitert den Shell-Aufruf um diese Möglichkeit, ein Anfangsverzeichnis vorzugeben.
Public Function ShellIn(Exec As String, Optional ExecDir As String, _
Optional ByVal WindowStyle As VbAppWinStyle = vbMinimizedNoFocus) _
As Long
Dim nCurDir As String
If StrPtr(ExecDir) Then
nCurDir = CurDir
ChDrive ExecDir
ChDir ExecDir
ShellIn = Shell(Exec, WindowStyle)
ChDrive nCurDir
ChDir nCurDir
Else
ShellIn = Shell(Exec, WindowStyle)
End If
End Function
Die Voreinstellung des Parameters WindowStyle ist hier übrigens abweichend vom Shell-Original (dort vbMinimizedFocus) auf vbMinimizedNoFocus gesetzt - mir will einfach kein vernünftiger Grund einfallen, warum die gestartete Anwendung minimiert, also im Prinzip nicht sichtbar und daher nicht nutzbar gestartet werden soll, aber trotzdem der laufenden Anwendung der Fokus entzogen werden soll. Sie können die Vorgabe natürlich wieder dem Original oder aber auch ihren individuellen Wünschen anpassen.
|