Eigenschaftendialog des Explorers für Dateien und Verzeichnisse anzeigen

Veröffentlicht: 01. Okt 2002 | Aktualisiert: 22. Jun 2004

Von Mathias Schiffer

Wählen Sie im Windows Explorer den Punkt Eigenschaften des Kontextmenüs einer Datei oder eines Verzeichnisses aus, präsentiert der Explorer ihnen eine übersichtliche Zusammenfassung der Datei- bzw. Verzeichniseigenschaften. Wir zeigen Ihnen, wie Sie diesen Dialog aus Visual Basic heraus aufrufen können.

Um den Windows Explorer dazu zu bewegen, uns seinen Eigenschaftendialog auszuleihen, bedarf es lediglich einer einzigen API-Funktion: Die multitalentierte Funktion ShellExecuteEx kann diese Aufgabe für uns übernehmen. Ihr einziger Parameter ist eine SHELLEXECUTEINFO-Struktur:

Private 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

Nur wenige Parameter dieser Struktur müssen belegt werden, um das gewünschte Ziel zu erreichen:

Dem Parameter cbSize ist mittels Len(Strukturvariable) die Größe der Struktur zuzuweisen. An fMask wird die Konstante SEE_MASK_INVOKEIDLIST übergeben, die einen Zugriff auf Kontextmenüeinträge über den Parameter lpVerb ermöglicht: Zur Anzeige des Eigenschaftendialogs wird hier der String Properties verwendet.

Über den Parameter nShow wird die gewünschte Anzeige bestimmt: Für eine normale, sichtbare Anzeige wird hier die Konstante SW_SHOW verwendet. Letztlich muss natürlich noch angegeben werden, für welche Datei oder welches Verzeichnis der Dialog angezeigt werden soll: Diese Information wird in lpFile hinterlegt, der auch vor Netzwerkpfaden nicht halt macht. Optional kann im Parameter hwnd das Handle eines Fensters (etwa einer VB-Form) angegeben werden, zu dem Fehlermeldungen des Explorers im Stil einer MessageBox modal angezeigt werden sollen.

Mit diesen Angaben versorgt kann die Struktur nun mittels ShellExecuteEx verwendet werden. Kann der Dialog erfolgreich angezeigt werden, so ist der Wert im Parameter hInstApp der Struktur nach dem Aufruf mit einem Wert über 32 belegt.

Die folgende Routine ShowFilePropertiesDialog fasst diese Informationen für Sie zusammen:

Tipp: Markieren Sie den gesamten Code und fügen Sie ihn zunächst in Write.exe ein. Kopieren Sie den Code von dort aus in Ihren Visual Basic Editor, um den Verlust von Zeilenumbrüchen zu vermeiden.

' Notwendige API-Deklarationen:
Private Const SEE_MASK_INVOKEIDLIST As Long = &HC&
Private Const SW_SHOW               As Long = 5&
Private 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
Private Declare Function ShellExecuteEx _
  Lib "shell32.dll" ( _
  ByRef SEI As SHELLEXECUTEINFO _
  ) As Long
Public Function ShowFilePropertiesDialog( _
  ByVal FileOrDirectory As String, _
  Optional ByVal hwndParent As Long) As Boolean
' -----------------------------------------------------
' Zeigt den Explorer-Dialog für Datei- oder
' Verzeichniseigenschaften an.
'
' FileOrDirectory: Pfad zur Datei oder zum Verzeichnis,
'                  für das der Dialog angezeigt werden
'                  soll. UNC-Netzwerkpfade werden
'                  unterstützt.
' hwndParent:      Optional. Fensterhandle einer Form,
'                  zu der auszugebene Fehlermeldungen
'                  modal wirken sollen. Wird dieser
'                  parameter nicht übergeben, werden
'                  Fehlermeldungen nichtmodal darge-
'                  stellt.
' Rückgabewert:    True bei erfolgreicher Anzeige des
'                  Dialogs, False bei Fehlern.
' -----------------------------------------------------
Dim SEI As SHELLEXECUTEINFO
  ' SHELLEXECUTEINFO-Struktur mit den notwendigen
  ' Werten belegen:
  With SEI
    .cbSize = Len(SEI)
    .hwnd = hwndParent
    .nShow = SW_SHOW
    .fMask = SEE_MASK_INVOKEIDLIST
    .lpVerb = "Properties"
    .lpFile = FileOrDirectory
  End With
  ' Mittels ShellExecuteEx den Dialog anzeigen:
  ShellExecuteEx SEI
  ' War der Aufruf erfolgreich, ist der Parameter
  ' hInstApp der SHELLEXECUTEINFO-Struktur größer
  ' als 32:
  ShowFilePropertiesDialog = (SEI.hInstApp > 32)
End Function