AB4.2Xでのバージョン情報の取得について
Posted: 2006年3月10日(金) 19:54
久しぶりにプログラムすることになり、どーせなら最新版でと思い、
がんばってますが、うまくいかなくて苦労しています。
みなさん申し訳ありませんが、こんな私に力をかしてください。
質問は、ファイルのバージョン情報取得方法についてです。
古いABソースを引っ張り出して、AB4.22に書き直しましたが、
うまく動作してくれません。
参考にAB4.13まで動いたソースを書いておきますので、AB4.22で動かすための
修正箇所を教えてください。
宜しくお願いします。
※ ソースは昔見つけたVB版を訳もわからず、ABに書き直したものです。
今でも意味はわかっていませんが・・・。
がんばってますが、うまくいかなくて苦労しています。
みなさん申し訳ありませんが、こんな私に力をかしてください。
質問は、ファイルのバージョン情報取得方法についてです。
古いABソースを引っ張り出して、AB4.22に書き直しましたが、
うまく動作してくれません。
参考にAB4.13まで動いたソースを書いておきますので、AB4.22で動かすための
修正箇所を教えてください。
宜しくお願いします。
※ ソースは昔見つけたVB版を訳もわからず、ABに書き直したものです。
今でも意味はわかっていませんが・・・。
コード: 全て選択
Declare Function GetFileVersionInfoSize Lib "Version.dll" _
Alias "GetFileVersionInfoSizeA" _
(ByVal lptstrFilename As String, ByVal lpdwHandle As DWord) As DWord
Declare Function GetFileVersionInfo Lib "Version.dll" _
Alias "GetFileVersionInfoA" _
(ByVal lptstrFilename As String, ByVal dwHandle As DWord, _
ByVal dwLen As DWord, ByRef lpData As Any) As DWord
Declare Function VerQueryValue Lib "Version.dll" _
Alias "VerQueryValueA"
(pBlock As VoidPtr, ByVal lpSubBlock As String, _
ByRef lplpBuffer As VoidPtr, ByRef puLen As DWord) As DWord
Type CODEPAGE
cpLOW As Integer
cpHIGH As Integer
End Type
Sub MainWnd_CommandButton1_Click()
Dim strTargetFileName As String
Dim SizeOfVersionInfo As DWord
Dim DummyHandle As DWord
Dim bytDummyVersionInfo[2048] As Byte
Dim PointerVersionInfo As VoidPtr
Dim LengthVersionInfo As DWord
Dim Win32apiResultCode As DWord
Dim typCODEPAGE As CODEPAGE
Dim strTemp As String
strTargetFileName = "C:\WINDOWS\system32\calc.exe"
SizeOfVersionInfo = GetFileVersionInfoSize(strTargetFileName, _
DummyHandle)
If SizeOfVersionInfo > 0 Then
Win32apiResultCode = GetFileVersionInfo(strTargetFileName, 0, _
SizeOfVersionInfo, bytDummyVersionInfo[0])
Win32apiResultCode = VerQueryValue(bytDummyVersionInfo[], _
"\VarFileInfo\Translation", PointerVersionInfo, LengthVersionInfo)
memcpy(VarPtr(typCODEPAGE), PointerVersionInfo, LengthVersionInfo)
Dim strPath As String
Dim strCodeLow As String
Dim strCodeHigh As String
strCodeLow = Hex$(typCODEPAGE.cpLOW)
strCodeHigh = Hex$(typCODEPAGE.cpHIGH)
strPath = "\StringFileInfo\" + Right$("0000" + strCodeLow, 4) _
+ Right$("0000" + strCodeHigh, 4) + "\"
Dim strPathFull As String
strPathFull = strPath + "ProductName"
Win32apiResultCode = VerQueryValue(bytDummyVersionInfo[], _
strPathFull, PointerVersionInfo, LengthVersionInfo)
strTemp = Space$(LengthVersionInfo)
memcpy(StrPtr(strTemp), PointerVersionInfo, LengthVersionInfo)
If Len(strTemp) > 1 Then
MsgBox 0, Left$(strTemp, Len(strTemp) - 1)
End If
End If
End Sub