Weil wir im vorangegangen Tipp gerade bei der SHGetFileInfo
API-Funktion waren, hier gleich noch ein Tipp hinterher. Wenn Sie also mal ganz fix
ermitteln wollen oder müssen, ob die *.exe Datei nun 16 oder 32 Bit oder gar eine DOS
Anwendung ist, dann greifen Sie zu nachfolgendem Tipp.
Allgemein/Deklarationen
Const MAX_PATH = 260
Private Type SHFILEINFO
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * MAX_PATH
szTypeName As String * 80
End Type
Private Declare Function SHGetFileInfo Lib "Shell32" Alias
"SHGetFileInfoA" ( _
ByVal pszPath As Any, _
ByVal dwFileAttributes As Long, _
psfi As SHFILEINFO, _
ByVal cbFileInfo As Long, _
ByVal uFlags As Long) _
As Long
Const SHGFI_EXETYPE = &H2000&
Const EXE_WIN16 = &H454E ' "NE"
Const EXE_DOS16 = &H5A4D ' "MZ"
Const EXE_WIN32 = &H4550 ' "PE"
'Const EXE_DOS32 = &H4543 ' "CE"
Allgemein/GetExeType
Private Function GetExeType(sFilePath As String)
Dim dwExeVal As Long
Dim shfi As SHFILEINFO
Dim dwLowWord As Long
Dim dwHighWord As Long
Dim bHighWordLowByte As Byte
Dim bHighWordHighByte As Byte
Dim sRtn As String
dwExeVal = SHGetFileInfo(ByVal sFilePath, 0&, shfi, Len(shfi), SHGFI_EXETYPE)
dwLowWord = dwExeVal And &HFFFF&
Select Case dwLowWord
Case 0: sRtn = "<nicht ausführbar>"
Case EXE_WIN16: sRtn = "16 Bit Windows"
Case EXE_DOS16: sRtn = "DOS"
Case EXE_WIN32: sRtn = "32 Bit Windows"
Case Else: sRtn = "<unbekannt>"
End Select
GetExeType = sRtn
End Function
Funktionsaufruf
MsgBox GetExeType("C:\command.com")
In unserem Beispiel wird der Funktion die zu prüfenden Datei übergeben und das Ergebnis
in einer Messagebox ausgegeben. |