VB-Homepage Tipp 407

Ermitteln, ob es sich um eine DOS, 16Bit oder 32Bit Anwendung handelt

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.

Tipp-Download

Quelle :

Zurück zur Übersichtsseite