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.

Api-AufrufeVerwendete 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