投稿日 | : 2006/09/19(Tue) 00:40 |
投稿者 | : Nemo |
Eメール | : |
URL | : |
タイトル | : Re^2: バージョン情報の取得 |
レスありがとうございます。
CopyMemory関数ならApiにありました。
、、、が、結果は同じでした。一応コードを載せますね。
---------------------------------------------------------------
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
Type CODEPAGE
lngLOW As Integer
lngHIGH As Integer
End Type
Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersio
nInfoA" ( _
ByVal lptstrFilename As String, _
ByVal dwHandle As Long, _
ByVal dwLen As Long, _
lpData As Any) As Long
Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVe
rsionInfoSizeA" ( _
ByVal lptstrFilename As String, _
lpdwHandle As Long) As Long
Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA&quo
t; ( _
pBlock As Any, _
ByVal lpSubBlock As String, _
lplpBuffer As Any, _
puLen As Long) As Long
Declare Function MoveMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
ByRef Dest As Any, ByRef Src As Any, ByVal Size As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
Destination As Any, Source As Any, ByVal Length As Long)
Public Sub GetFileVersion(Path As String)
Dim LngRet As Long
Dim lngDummy As Long
Dim bBuffer() As Byte
Dim lngLen As Long
Dim lpBuffer As Long
Dim ffi As VS_FIXEDFILEINFO
If Dir$(Path) = "" Then
Exit Sub
End If
' strFileName に取得したいファイル名をセット
strFileName = Path
' サイズを取得
lngLen = GetFileVersionInfoSize(strFileName, lngDummy)
If lngLen < 1 Then
Exit Sub
End If
' バイトの配列の領域取得
ReDim bBuffer(lngLen)
' ファイル バージョン情報を取得
LngRet = GetFileVersionInfo(strFileName, 0&, lngLen, bBuffer(0))
LngRet = VerQueryValue(bBuffer(0), "\", lpBuffer, lngLen)
' バイトの処理
CopyMemory ffi, lpBuffer, Len(ffi)
' ファイル バージョン
Debug.Print "FileViersion = " & _
Format$(ffi.dwFileVersionMSh) & "." & _
Format$(ffi.dwFileVersionMSl) & "." & _
Format$(ffi.dwFileVersionLSh) & "." & _
Format$(ffi.dwFileVersionLSl)
End Sub
---------------------------------------------------------------
長くなりましたが、こんな感じです。
指定したexe,dllファイルのフルパスを渡してdebug出力させるようにしただけです。