Tipp 3.8 - Öffnen-mit-Dialog
Wie kann ich den Öffnen-mit-Dialog für eine Datei aufrufen?
Mit dieser Funktion können Sie den Öffnen-mit-Dialog für eine Datei aufrufen. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.
Verwendete Win32-Api-Aufrufe und Typen: GetDesktopWindow, ShellExecuteEx - SHELLEXECUTEINFO
Beispiel:
Option Explicit Public Type SHELLEXECUTEINFO cbSize As Long fMask As Long hwnd As Long lpVerb As String lpFile As String lpParameters As String lpDirectory As String nShow As Long hInstApp As Long lpIDList As Long lpClass As String hkeyClass As Long dwHotKey As Long hIcon As Long hProcess As Long End Type Public Declare Function GetDesktopWindow _ Lib "user32" () As Long Public Declare Function ShellExecuteEx _ Lib "shell32.dll" _ (ShellExExInfo As SHELLEXECUTEINFO) As Long Public Function OpenAsDialog(sPath As String) As Boolean '// ----------------------------------------------------- '// Methode: | Ruft den "Öffnen mit"-Dialog für eine '// | Datei auf '// ----------------------------------------------------- '// Parameter: | sPath = gültiger Dateipfad '// ----------------------------------------------------- '// Rückgabe: | Long-Wert der API-Funktionsrückgabe '// ----------------------------------------------------- '// Beispiel: | ?OpenAsDialog("C:\MYFILE.INI") '// ----------------------------------------------------- '// Autor: | Stefan Kulpa '// | EDV Innovation & Consulting - Dormagen '// ----------------------------------------------------- Const SEE_MASK_INVOKEIDLIST As Long = &HC Const SEE_MASK_NOCLOSEPROCESS As Long = &H40 Const SEE_MASK_FLAG_NO_UI As Long = &H400 Dim uShExInf As SHELLEXECUTEINFO On Error Resume Next With uShExInf .cbSize = Len(uShExInf) .fMask = SEE_MASK_NOCLOSEPROCESS Or _ SEE_MASK_INVOKEIDLIST Or _ SEE_MASK_FLAG_NO_UI .hwnd = GetDesktopWindow() .lpVerb = "openas" .lpFile = sPath .lpParameters = vbNullChar .lpDirectory = vbNullChar .nShow = 0 .hInstApp = 0 .lpIDList = 0 End With OpenAsDialog = (ShellExecuteEx(uShExInf) <> False) '// ----------------------------------------------------- '// Alternative: '// Call Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " & _ '// sPath, 1) '// ----------------------------------------------------- End Function