Tipp 1.28 - Dateiversion ermitteln

Wie kann ich eine Dateiversion einer (ausführbaren) Datei ermitteln?

Mit dieser Funktion können Sie eine Dateiversion einer (ausführbaren) 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: GetFileVersionInfoSize, GetFileVersionInfo, VerQueryValue, CopyMemory - VS_FIXEDFILEINFO

Beispiel:

Option Explicit
 
Type VS_FIXEDFILEINFO
     dwSignature        As Long
     dwStrucVersion     As Long
     dwFileVersionMS    As Long
     dwFileVersionLS    As Long
     dwProductVersionMS As Long
     dwProductVersionLS As Long
     dwFileFlagsMask    As Long
     dwFileFlags        As Long
     dwFileOS           As Long
     dwFileType         As Long
     dwFileSubtype      As Long
     dwFileDateMS       As Long
     dwFileDateLS       As Long
End Type
 
Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias _
                "GetFileVersionInfoSizeA" _
                (ByVal lptstrFilename As String, _
                 lpdwHandle As Long) As Long
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
Declare Function VerQueryValue Lib "Version.dll" Alias _
                "VerQueryValueA" _
                (pBlock As Any, _
                 ByVal lpSubBlock As String, _
                 lplpBuffer As Any, _
                 nVerSize As Long) As Long
 
Declare Sub CopyMemory Lib "kernel32" Alias _
           "RtlMoveMemory" _
           (Destination As Any, _
            Source As Any, _
            ByVal Length As Long)
 
Function GetFileVersion(sDriverFile As String) As String
'// -----------------------------------------------------
'// Methode:   | Dateiversion einer (ausführbaren) Datei
'//            | ermitteln (z.B. EXE und DLL-Dateien).
'// -----------------------------------------------------
'// Parameter: | sDriverFile - Pfad zur EXE oder DLL
'// -----------------------------------------------------
'// Rückgabe:  | Version als String
'// -----------------------------------------------------
'// Autor:     | Stefan Kulpa
'//            | EDV Innovation & Consulting - Dormagen
'// -----------------------------------------------------
    Dim uFI          As VS_FIXEDFILEINFO
    Dim btBuffer()   As Byte
    Dim lBufferSize  As Long
    Dim lpBuffer     As Long
    Dim lVerSize     As Long
    Dim lUnused      As Long
    Dim sTmpVer      As String
 
    lBufferSize = GetFileVersionInfoSize(sDriverFile, lUnused)
    If lBufferSize > 0 Then
        ReDim btBuffer(lBufferSize)
        Call GetFileVersionInfo(sDriverFile, 0&, lBufferSize, btBuffer(0))
        Call VerQueryValue(btBuffer(0), "\", lpBuffer, lVerSize)
        Call CopyMemory(uFI, ByVal lpBuffer, Len(uFI))
        sTmpVer = Format$(HiWord(uFI.dwFileVersionMS)) & "." & _
                  Format$(LoWord(uFI.dwFileVersionMS), "00") & "."
        If uFI.dwFileVersionLS > 0 Then
            sTmpVer = sTmpVer & Format$(HiWord(uFI.dwFileVersionLS), "00") & "." & _
                                Format$(LoWord(uFI.dwFileVersionLS), "00")
        Else
            sTmpVer = sTmpVer & Format$(uFI.dwFileVersionLS, "0000")
        End If
    End If
    GetFileVersion = sTmpVer
 
End Function
 
Function HiWord(dw As Long) As Long
 
    If dw And &H80000000 Then
          HiWord = (dw \ 65535) - 1
    Else: HiWord = dw \ 65535
    End If
 
End Function
 
Function LoWord(dw As Long) As Long
 
    If dw And &H8000& Then
          LoWord = &H8000 Or (dw And &H7FFF&)
    Else: LoWord = dw And &HFFFF&
    End If
 
End Function
 
Sub TestGetFileVersion()
 
    MsgBox _
    GetFileVersion("C:\Programme\Internet Explorer\iexplore.exe")
 
End Sub