Tipp 1.13 - Dateitypenbezeichnung ermitteln

Wie kann ich die Dateitypenbezeichnung ermitteln?

Mit dieser Funktion können Sie die Dateitypenbezeichnung einer Datei ermitteln. 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: SHGetFileInfo - SHFILEINFO

Beispiel:

Option Explicit
 
Public Const MAXPATH     As Long = 260
 
Public Type SHFILEINFO
  hIcon                  As Long
  iIcon                  As Long
  dwAttributes           As Long
  szDisplayName          As String * MAXPATH
  szTypeName             As String * 80
End Type
 
Public Declare Function SHGetFileInfo _
    Lib "shell32.dll" Alias _
    "SHGetFileInfoA" _
    (ByVal pszPath As String, _
    ByVal dwFileAttributes As Long, _
    psfi As SHFILEINFO, _
    ByVal cbFileInfo As Long, _
    ByVal uFlags As Long) As Long
 
Public Function GetFileTypeName( _
                sFilePath As String) _
                As String
  '// -----------------------------------------------------
  '// Methode:   | Ermittelt die Dateitypbezeichnung analog
  '//            | des Eigenschaftsfensters a. dem Explorer
  '// -----------------------------------------------------
  '// Parameter: | sFilePath = gültiger Dateipfad
  '// -----------------------------------------------------
  '// Rückgabe:  | Dateitypbezeichnung
  '// -----------------------------------------------------
  '// Autor:     | Stefan Kulpa
  '//            | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
  '// Beispiel:
  '// ?GetFileTypeName("C:\WINNT\system32\notepad.exe")
  '// = "Anwendung"
  '// -----------------------------------------------------
 
  Const SHGFI_TYPENAME    As Long = &H400
  Dim shfi                As SHFILEINFO
  If SHGetFileInfo(ByVal sFilePath, _
      0&, _
      shfi, _
      Len(shfi), _
      SHGFI_TYPENAME) Then
    If VBA.InStr(shfi.szTypeName, vbNullChar) > 1 Then
      GetFileTypeName = _
          VBA.Left(shfi.szTypeName, _
          VBA.InStr(shfi.szTypeName, vbNullChar) - 1)
    End If
  End If
 
End Function