FileVersion




Private Declare Function GetFileVersionInfoSize Lib "version.dll" Alias _
"GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, _
lpdwHandle 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
' Get versioning information about a file

' it only works with Win32 files, and under Windows 95/98 the short path

' form of the specified file name must be less than 126 characters.

'

' If unsuccessful returns Empty

' If successful returns an array of strings in the format

' "resourcename: resourcevalue"

' if a resource value hasn't been found, the string contains

' just the resource name, and you can filter out these items

' using the following statement

' resources() = Filter(GetFileVersionData(FileName), ":")

'

' Usage:

' Dim res As Variant, i As Long

' res = GetFileVersionData(FileName)

' If IsArray(res) Then

' For i = LBound(res) To UBound(res)

' Debug.Print res(i)

' Next

' End If

Function GetFileVersionData(ByVal FileName As String) As Variant
Dim length As Long
Dim handle As Long
Dim buffer As String
Dim index As Long
Dim pos As Long

' get the size of the version info block

' (handle is always set to zero by the function

length = GetFileVersionInfoSize(FileName, handle)
If length = 0 Then Exit Function

' create the buffer (these are Unicode chars)

buffer = Space$(length)

' get version information (2nd argument is ignored)

If GetFileVersionInfo(FileName, handle, length, ByVal StrPtr(buffer)) = 0 _
Then
' a zero return value means error

Exit Function
End If

' extract version information out of the buffer

' IMPORTANT: it doesn't use the official APIs, instead

' it uses euristics to extract the strings, and might

' fail under some circumstances


' create an array with the names of all the standard resources

Dim res() As String
res() = Split("CompanyName;FileDescription;FileVersion;InternalName;" & _
"LegalCopyright;OriginalFilename;ProductName;ProductVersion;" & _
"Comments;LegalTrademarks;PrivateBuild;SpecialBuild", ";")

' repeat for all the standard resources

For index = 0 To UBound(res)
pos = InStr(buffer, res(index))
If pos Then
' skip over the resource name

pos = pos + Len(res(index)) + 1
' if this is a null char, skip over it

If Mid$(buffer, pos, 1) = vbNullChar Then pos = pos + 1

' extract the null terminated string and

' append it to the resource name

res(index) = res(index) & ": " & Mid$(buffer, pos, InStr(pos, _
buffer, vbNullChar) - pos)
End If
Next

GetFileVersionData = res()

End Function












( fileversion.html )- by Paolo Puglisi - Modifica del 17/12/2023