Für dieses Beispiel brauchen Sie lediglich ein Formular. Fügen Sie den gesamten untenstehenden Code ein. Beim Ausführen des Programms wird in einer Messagbox der Pfad und Dateiname sowie die Dateiversion angezeigt.
Private Declare Function GetFullPathName Lib "kernel32" Alias _
"GetFullPathNameA" (ByVal lpFileName As String, ByVal nBufferLength _
As Long, ByVal lpBuffer As String, lpFilePart As Long) As Long
Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias _
"GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwhandle _
As Long, ByVal dwlen As Long, lpData As Any) As Long
Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias _
"GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, _
lpdwHandle As Long) As Long
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function VerQueryValue Lib "Version.dll" Alias _
"VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer _
As Any, LenBuff As Long) As Long
Private Type VS_FIXEDFILEINFO
dwSignature As Long
dwStrucVersionl As Integer
dwStrucVersionh As Integer
dwFileVersionMSl As Integer
dwFileVersionMSh As Integer
dwFileVersionLSl As Integer
dwFileVersionLSh As Integer
dwProductVersionMSl As Integer
dwProductVersionMSh As Integer
dwProductVersionLSl As Integer
dwProductVersionLSh As Integer
dwFileFlagsMask As Long
dwFileFlags As Long
dwFileOS As Long
dwFileType As Long
dwFileSubtype As Long
dwFileDateMS As Long
dwFileDateLS As Long
End Type
Private Sub Form_Load()
Dim FileVerBuffer As VS_FIXEDFILEINFO
Dim Buffer() As Byte
Dim Dummy As Long
Dim BufferLength As Long
Dim lplpBuffer As Long
Dim LenBuff As Long
Dim mFileVersion As String
Dim pathName As String
' Beispiel-EXE:
pathName = "C:\Windows\calc.exe" 'Calculator / Rechner
BufferLength = GetFileVersionInfoSize(pathName, Dummy)
ReDim Buffer(BufferLength)
Call GetFileVersionInfo(pathName, 0&, BufferLength, Buffer(0))
Call VerQueryValue(Buffer(0), "\", lplpBuffer, LenBuff)
Call CopyMem(FileVerBuffer, ByVal lplpBuffer, Len(FileVerBuffer))
mFileVersion = Format$(FileVerBuffer.dwFileVersionMSh) & "." & _
Format$(FileVerBuffer.dwFileVersionMSl, "00") & "."
If FileVerBuffer.dwFileVersionLSh > 0 Then
mFileVersion = mFileVersion & Format$(FileVerBuffer.dwFileVersionLSh, "00") & "." & _
Format$(FileVerBuffer.dwFileVersionLSl, "00")
Else
mFileVersion = mFileVersion & Format$(FileVerBuffer.dwFileVersionLSl, "0000")
End If
' Resultat in Messagebox
MsgBox pathName & " - FileVersion: " & mFileVersion
End Sub