GetFileVersionInfo VB声明 Declare Function GetFileVersionInfo& Lib "version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, ByVal dwLen As Long, lpData As Byte) 说明 从支持版本标记的一个模块里获取文件版本信息 返回值 Long,非零表示成功,零表示失败。会设置GetLastError 参数表 参数 类型及说明 lptstrFilename String,欲从中载入版本信息的一个文件的名字 dwHandle Long,win32中未用 dwLen Long,由lpData参数指定的字节数组或缓冲区的大小。用GetFileVersionInfoSize函数判断要求的缓冲区长度有多大 lpData Byte,指定一个字节缓冲区的第一个字节。该缓冲区用于装载文件的版本信息 注解 在win32下不用dwHandle参数
Public Declare Function GetFileVersionInfoSize Lib "version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long 说明 针对包含了版本资源的一个文件,判断容纳文件版本信息需要一个多大的缓冲区 返回值 Long,容纳文件的版本资源所需的缓冲区长度。如文件不包含版本信息,则返回一个0值。会设置GetLastError 参数表 lptstrFilename - String,包含了版本资源的一个文件的名字 lpdwHandle ----- Long,在这个变量中载入0值在win32下不用lpdwHandle参数
Public Function GetFileVerInfo(FullFileName As String) As String() Dim rc As Long, lDummy As Long, sBuffer() As Byte Dim lBufferLen As Long, lVerPointer As Long Dim bytebuffer(260) As Byte Dim Lang_Charset_String As String Dim HexNumber As Long, Buffer As String Dim i As Integer, strtemp As String Dim strFileVer(5) As String For i = 0 To 5 strFileVer(i) = "" '"No Version Info available!" Next '*** Get size **** lBufferLen = GetFileVersionInfoSize(FullFileName, lDummy) If lBufferLen < 1 Then GetFileVerInfo = strFileVer Exit Function End If '**** Store info to udtVerBuffer struct **** ReDim sBuffer(lBufferLen) rc = GetFileVersionInfo(FullFileName, 0&, lBufferLen, sBuffer(0)) If rc = 0 Then GetFileVerInfo = strFileVer Exit Function '"No Version Info available!" End If rc = VerQueryValue(sBuffer(0), "\VarFileInfo\Translation", lVerPointer, lBufferLen) If rc = 0 Then GetFileVerInfo = strFileVer Exit Function '"No Version Info available!" End If
strtemp = "" For i = 0 To 4 Buffer = String(260, Asc(Syn_kg)) strtemp = "\StringFileInfo\" & Lang_Charset_String & Syn_pzh & strFileVer(i) rc = VerQueryValue(sBuffer(0), strtemp, lVerPointer, lBufferLen) If rc <> 0 Then lstrcpy Buffer, lVerPointer Buffer = StripTerminator(Buffer) Else Buffer = "" End If strFileVer(i) = Buffer Next i GetFileVerInfo = strFileVer End Function
Declare Function GetFileVersionInfo& Lib "version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, ByVal dwLen As Long, lpData As Byte)
说明
从支持版本标记的一个模块里获取文件版本信息
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
lptstrFilename String,欲从中载入版本信息的一个文件的名字
dwHandle Long,win32中未用
dwLen Long,由lpData参数指定的字节数组或缓冲区的大小。用GetFileVersionInfoSize函数判断要求的缓冲区长度有多大
lpData Byte,指定一个字节缓冲区的第一个字节。该缓冲区用于装载文件的版本信息
注解
在win32下不用dwHandle参数
说明
针对包含了版本资源的一个文件,判断容纳文件版本信息需要一个多大的缓冲区
返回值
Long,容纳文件的版本资源所需的缓冲区长度。如文件不包含版本信息,则返回一个0值。会设置GetLastError
参数表
lptstrFilename - String,包含了版本资源的一个文件的名字
lpdwHandle ----- Long,在这个变量中载入0值在win32下不用lpdwHandle参数
Dim rc As Long, lDummy As Long, sBuffer() As Byte
Dim lBufferLen As Long, lVerPointer As Long
Dim bytebuffer(260) As Byte
Dim Lang_Charset_String As String
Dim HexNumber As Long, Buffer As String
Dim i As Integer, strtemp As String
Dim strFileVer(5) As String For i = 0 To 5
strFileVer(i) = "" '"No Version Info available!"
Next
'*** Get size ****
lBufferLen = GetFileVersionInfoSize(FullFileName, lDummy)
If lBufferLen < 1 Then
GetFileVerInfo = strFileVer
Exit Function
End If '**** Store info to udtVerBuffer struct ****
ReDim sBuffer(lBufferLen)
rc = GetFileVersionInfo(FullFileName, 0&, lBufferLen, sBuffer(0))
If rc = 0 Then
GetFileVerInfo = strFileVer
Exit Function '"No Version Info available!"
End If
rc = VerQueryValue(sBuffer(0), "\VarFileInfo\Translation", lVerPointer, lBufferLen)
If rc = 0 Then
GetFileVerInfo = strFileVer
Exit Function '"No Version Info available!"
End If
strFileVer(2) = "CompanyName"
strFileVer(4) = "FileDescription"
strFileVer(0) = "FileVersion"
strFileVer(1) = "InternalName"
strFileVer(3) = "LegalCopyright"
MoveMemory bytebuffer(0), lVerPointer, lBufferLen
HexNumber = bytebuffer(2) + bytebuffer(3) * &H100 + bytebuffer(0) * &H10000 + bytebuffer(1) * &H1000000
rc = CLng(bytebuffer(0) + bytebuffer(1) * &H100)
Lang_Charset_String = Hex(HexNumber)
Do While Len(Lang_Charset_String) < 8
Lang_Charset_String = "0" & Lang_Charset_String
Loop
strtemp = String(260, Asc(Syn_kg))
rc = VerLanguageName(rc, strtemp, CLng(255))
strFileVer(5) = StripTerminator(strtemp)
strtemp = ""
For i = 0 To 4
Buffer = String(260, Asc(Syn_kg))
strtemp = "\StringFileInfo\" & Lang_Charset_String & Syn_pzh & strFileVer(i)
rc = VerQueryValue(sBuffer(0), strtemp, lVerPointer, lBufferLen)
If rc <> 0 Then
lstrcpy Buffer, lVerPointer
Buffer = StripTerminator(Buffer)
Else
Buffer = ""
End If
strFileVer(i) = Buffer
Next i
GetFileVerInfo = strFileVer
End Function