如何取得EXE文件的版本信息??

_C_S_D_N_ 2003-05-19 04:30:08
如何取得EXE文件的版本信息??
...全文
51 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ken2002p4 2003-05-19
  • 打赏
  • 举报
回复
app.major & "." & app.minor
flxa 2003-05-19
  • 打赏
  • 举报
回复
'获取文件版本的API定义
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

' API structures.
'
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type


Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

'取得文件版本的API
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 Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, ByVal Source As Long, ByVal length As Long)
Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long

Public Function DisplayVerInfo(vFileName As String, Optional vShowAll As Boolean = False) As String
Dim FullFileName As String

Dim rc As Long, lDummy As Long, sBuffer() As Byte
Dim lBufferLen As Long, lVerPointer As Long, udtVerBuffer As VS_FIXEDFILEINFO
Dim lVerbufferLen As Long
Dim StrucVer As String, FileVer As String, ProdVer As String
Dim TmpTime As FILETIME


FullFileName = vFileName

'取得大小
lBufferLen = GetFileVersionInfoSize(FullFileName, lDummy)
'=<0为失败,或,返回失败
If lBufferLen < 1 Then
'MsgBox "在文件[" & FullFilename & "]中没有找到文件版本信息,请确认文件的准确性!", vbExclamation + vbOKOnly, " 系统提示"
If vShowAll Then
DisplayVerInfo = "0000000000000000"
Else
DisplayVerInfo = "0.0.0.0"
End If
Exit Function
End If

'保存有关信息去缓冲
ReDim sBuffer(lBufferLen)
rc = GetFileVersionInfo(FullFileName, 0&, lBufferLen, sBuffer(0))
rc = VerQueryValue(sBuffer(0), "\", lVerPointer, lVerbufferLen)
MoveMemory udtVerBuffer, lVerPointer, Len(udtVerBuffer)

If vShowAll Then
FileVer = Format(udtVerBuffer.dwFileVersionMSh, "0000") & Format(udtVerBuffer.dwFileVersionMSl, "0000") & Format(udtVerBuffer.dwFileVersionLSh, "0000") & Format(udtVerBuffer.dwFileVersionLSl, "0000")
Else

'格式化主版本号
StrucVer = Format$(udtVerBuffer.dwStrucVersionh) & "." & Format$(udtVerBuffer.dwStrucVersionl)

'文件版本号
FileVer = Format$(udtVerBuffer.dwFileVersionMSh) & "." & Format$(udtVerBuffer.dwFileVersionMSl) & "." & Format$(udtVerBuffer.dwFileVersionLSh) & "." & Format$(udtVerBuffer.dwFileVersionLSl)

' '产品版本号
' ProdVer = Format$(udtVerBuffer.dwProductVersionMSh) & "." & Format$(udtVerBuffer.dwProductVersionMSl) & "." & Format$(udtVerBuffer.dwProductVersionLSh) & "." & Format$(udtVerBuffer.dwProductVersionLSl)
End If
DisplayVerInfo = FileVer


Dim a As New CFileInfo
a.FullPathName = vFileName


MsgBox Format(a.ModifyTime, "YYYY-MM-DD HH MM SS")

End Function

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧