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.
Verwendete 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