Eine ganze Reihe von Dialogen des Windows-Explorers, genauer
gesagt, der Windows-Shell, können Sie von Visual Basic aus nutzen,
oder zumindest aufrufen. So können Sie auch den Dialog "Öffnen
mit" zum Vorschein bringen, den der Explorer immer dann
zum Vorschein bringt, wenn Dokument ausgeführt werden soll, dessen
Verknüpfung mit einer Anwendung nicht bekannt oder defekt ist.
Der Aufruf dieses Dialogs erfolgt nicht über eine gesonderte
Funktion. Vielmehr erfolgt er als automatische Reaktion, wenn Sie
per Code dasselbe wie der Anwender veranstalten, nämlich ein
Dokument, oder allgemeiner, eine beliebige Datei mit unbekannter
Dateiverknüpfung zu öffnen. Das Öffnen von Dokumenten erfolgt
dabei über einen Aufruf der API-Funktion ShellExecute,
bei dem das sogenannte "Verb" (Befehl) "openas"
lautet.
An sich können Sie die Funktion ShellExecute problemlos direkt
aufrufen und den Rückgabewert selbst auf Fehlermeldungen hin
prüfen. Die Hilfsfunktion OpenAs erspart Ihnen den Umgang mit den
für diesen Aufruf überflüssigen Parametern und setzt
gegebenenfalls die Fehlerwerte in "ordentliche"
VB-Laufzeitfehler um.
Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Public Enum OpenAsErrorConstants
oaErrSystemOutOfMemoryOrResources = 0
oaErrFileNotFound = 2
oaErrPathNotFound = 3
oaErrAccessDiened = 5
oaErrOutOfMemory = 8
oaErrShare = 26
oaErrAssociationIncomplete = 27
oaErrDDETimeOut = 28
oaErrDDEFail = 29
oaErrDDEBusy = 30
oaErrNoAssociation = 31
oaErrDLLNotFound = 32
End Enum
Public Sub OpenAs(FilePathName As String, _
Optional ByVal ParentWnd As Long)
Dim nRet As Long
Const SW_SHOW = 5
nRet = _
ShellExecute(ParentWnd, "openas", FilePathName, "", "", SW_SHOW)
Select Case nRet
Case Is <= 32
Err.Raise vbObjectError + 10000 + nRet, "OpenAs"
End Select
End Sub
|