Tipp 1.4 - Ausführbarkeit prüfen

Wie kann ich eine Datei auf Ausführbarkeit prüfen?

Mit dieser Funktion können Sie eine Datei auf Ausführbarkeit prüfen. 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:

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 GetExeType(sSourceFile As String) _
                           As String
  '// -----------------------------------------------------
  '// Methode:   | Prüft Datei auf Ausführbarkeit
  '// -----------------------------------------------------
  '// Parameter: | sSourceFile = gültiger Dateipfad
  '// -----------------------------------------------------
  '// Rückgabe:  | EXE-Typ und ggf.
  '//            | OS-Versionskennung der Datei
  '// -----------------------------------------------------
  '// Autor:     | Stefan Kulpa
  '//            | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
 
  Const SHGFI_EXETYPE     As Long = &H2000
  Const EXE_WIN16         As Long = &H454E
  Const EXE_DOS16         As Long = &H5A4D
  Const EXE_WIN32         As Long = &H4550
 
  Dim uSHFileInfo         As SHFILEINFO
  Dim lExeVal             As Long
  Dim lLowWord            As Long
  Dim lHighWord           As Long
  Dim btHighWordLowByte   As Byte
  Dim btHighWordHighByte  As Byte
  Dim sReturn             As String
 
  lExeVal = SHGetFileInfo(ByVal sSourceFile, _
      0&, _
      uSHFileInfo, _
      Len(uSHFileInfo), _
      SHGFI_EXETYPE)
  lLowWord = lExeVal And &HFFFF&
  lHighWord = (lExeVal And Not &HFFFF&)  &HFFFF&
  btHighWordLowByte = lHighWord And &HFF&
  btHighWordHighByte = (lHighWord And Not &HFF&)  &HFF&
  Select Case lLowWord
  Case 0: sReturn = "<nicht ausführbar>"
  Case EXE_WIN16: sReturn = "Win16"
  Case EXE_DOS16: sReturn = "DOS"
  Case EXE_WIN32: sReturn = "Win32"
  Case Else: sReturn = "<unbekannt>"
  End Select
  If btHighWordHighByte Then
    sReturn = sReturn & ", v" & _
        VBA.Format(btHighWordHighByte, "#") & _
        "." & VBA.Format(btHighWordLowByte, "00")
  End If
  GetExeType = sReturn
 
End Function