バージョン情報リソースから選択された情報を取得 <TOP>
GetFileVersionInfo ファイルに関するバージョン情報を取得
GetFileVersionInfoSize ファイル内のバージョン情報のサイズを取得
VerQueryValue バージョン情報リソースから選択されたバージョン情報を取得
GetSystemDirectory Windows のシステムディレクトリのパスを取得
MoveMemory メモリの指定領域をコピー
EditBoxに、ファイルをドラッグ&ドロップしファイルの情報を得ています。
'================================================================ '= バージョン情報リソースから選択された情報を取得 '= (VerQueryValue.bas) '================================================================ #include "Windows.bi" ' ファイルに関するバージョン情報を取得 Declare Function Api_GetFileVersionInfo& Lib "Version" Alias "GetFileVersionInfoA" (ByVal lptstrFilename$, ByVal dwhandle&, ByVal dwlen&, lpData As Any) ' ファイル内のバージョン情報のサイズを取得 Declare Function Api_GetFileVersionInfoSize& Lib "Version" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename$, lpdwHandle&) ' バージョン情報リソースから選択されたバージョン情報を取得 Declare Function Api_VerQueryValue& Lib "Version" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock$, lplpBuffer As Any, puLen&) ' Windows のシステムディレクトリのパスを取得。システムディレクトリには、Windows ライブラリ、ドライバなどのファイルが置かれている Declare Function Api_GetSystemDirectory& Lib "Kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer$, ByVal nSize&) ' メモリの指定領域をコピー Declare Sub MoveMemory Lib "Kernel32" Alias "RtlMoveMemory" (Dest As Any, ByVal Source&, ByVal Length&) 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 #define VS_FFI_FILEFLAGSMASK &H3F ' #define VS_FFI_SIGNATURE &HFEEF04BD '構造体の識別子 #define VS_FFI_STRUCVERSION &H10000 '構造体のバイナリバージョン番号0x00000029以上の値 #define VS_FF_DEBUG &H1 'デバッグ情報が含まれている #define VS_FF_INFOINFERRED &H10 '構造体は動的に作成されている #define VS_FF_PATCHED &H4 'ファイルは修正されたバージョン #define VS_FF_PRERELEASE &H2 'ファイルは開発バージョン #define VS_FF_PRIVATEBUILD &H8 '標準的なリリースされたファイルではない #define VS_FF_SPECIALBUILD &H20 '標準ファイルのバリエーション #define VOS__BASE &H0 ' #define VOS__PM16 &H2 ' #define VOS__PM32 &H3 ' #define VOS__WINDOWS16 &H1 ' #define VOS__WINDOWS32 &H4 ' #define VOS_DOS &H10000 'MS-DOS #define VOS_DOS_WINDOWS16 &H10001 'in16 #define VOS_DOS_WINDOWS32 &H10004 'Win32s #define VOS_NT &H40000 'WindowsNT #define VOS_NT_WINDOWS32 &H40004 '設計対象となったOS #define VOS_OS216 &H20000 'OS/2 16ビット #define VOS_OS216_PM16 &H20002 ' #define VOS_OS232 &H30000 'OS/2 32ビット #define VOS_OS232_PM32 &H30003 ' #define VOS_UNKNOWN &H0 ' #define VFT_APP &H1 'アプリケーション #define VFT_DLL &H2 'ダイナミックリンクライブラリ #define VFT_DRV &H3 'デバイスドライバ #define VFT_FONT &H4 'フォント #define VFT_STATIC_LIB &H7 'スタティックリンクライブラリ #define VFT_UNKNOWN &H0 ' #define VFT_VXD &H5 '仮想デバイス #define VFT2_DRV_COMM &HA ' #define VFT2_DRV_DISPLAY &H4 'ディスプレイドライバ #define VFT2_DRV_INSTALLABLE &H8 'インストール可能なドライバ #define VFT2_DRV_KEYBOARD &H2 'キーボードドライバ #define VFT2_DRV_LANGUAGE &H3 '言語ドライバ #define VFT2_DRV_MOUSE &H5 'マウスドライバ #define VFT2_DRV_NETWORK &H6 'ネットワークドライバ #define VFT2_DRV_PRINTER &H1 'プリンタドライバ #define VFT2_DRV_SOUND &H9 'サウンドドライバ #define VFT2_DRV_SYSTEM &H7 'ファイルはシステムドライバ #define VFT2_UNKNOWN &H0 ' #define VFT2_FONT_RASTER &H1 'ラスタフォント #define VFT2_FONT_VECTOR &H2 'ベクタフォント #define VFT2_FONT_TRUETYPE &H3 'TrueTypeフォント #define MAX_PATH 260 Var Shared Edit1 As Object Var Shared List1 As Object Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 12 List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 : List1.SetWindowSize 274, 104 Var Shared sPath As String '================================================================ '= '================================================================ Declare Sub DisplayVerInfo(FilePath As String) Sub DisplayVerInfo(FilePath As String) Var SVer As String Var FVer As String Var PVer As String Var F As String Var Typ As String Var STyp As String Var OS As String Var l As Long Var BuffL As Long Var Pointer As Long Var VERSION As VS_FIXEDFILEINFO Var Ret As LOng List1.ResetContent l = Api_GetFileVersionInfoSize(FilePath, 0) If l < 1 Then A% = MessageBox("", "情報を取得できません!", 0, 2) Else Var Buff(l) As Byte Ret = Api_GetFileVersionInfo(FilePath, 0, l, Buff(0)) Ret = Api_VerQueryValue(Buff(0), "\", Pointer, BuffL) MoveMemory VERSION, Pointer, Len(VERSION) SVer = Format$(VERSION.dwStrucVersionh) & "." & Format$(VERSION.dwStrucVersionl) FVer = Format$(VERSION.dwFileVersionMSh) & "." & Format$(VERSION.dwFileVersionMSl) & "." & Format$(VERSION.dwFileVersionLSh) & "." & Format$(VERSION.dwFileVersionLSl) PVer = Format$(VERSION.dwProductVersionMSh) & "." & Format$(VERSION.dwProductVersionMSl) & "." & Format$(VERSION.dwProductVersionLSh) & "." & Format$(VERSION.dwProductVersionLSl) If VERSION.dwFileFlags And VS_FF_DEBUG Then F = "Debug " If VERSION.dwFileFlags And VS_FF_PRERELEASE Then F = F & "PreRel " If VERSION.dwFileFlags And VS_FF_PATCHED Then F = F & "Patched " If VERSION.dwFileFlags And VS_FF_PRIVATEBUILD Then F = F & "Private " If VERSION.dwFileFlags And VS_FF_INFOINFERRED Then F = F & "Info " If VERSION.dwFileFlags And VS_FF_SPECIALBUILD Then F = F & "Special " If VERSION.dwFileFlags And VFT2_UNKNOWN Then F = F & "Unknown " Select Case VERSION.dwFileOS Case VOS_DOS_WINDOWS16 OS = "DOS-Win16" Case VOS_DOS_WINDOWS32 OS = "DOS-Win32" Case VOS_OS216_PM16 OS = "OS/2-16 PM-16" Case VOS_OS232_PM32 OS = "OS/2-16 PM-32" Case VOS_NT_WINDOWS32 OS = "NT-Win32" Case Else OS = "Unknown" End Select Select Case VERSION.dwFileType Case VFT_APP Typ = "App" Case VFT_DLL Typ = "DLL" Case VFT_DRV Typ = "Driver" Select Case VERSION.dwFileSubtype Case VFT2_DRV_PRINTER STyp = "Printer drv" Case VFT2_DRV_KEYBOARD STyp = "Keyboard drv" Case VFT2_DRV_LANGUAGE STyp = "Language drv" Case VFT2_DRV_DISPLAY STyp = "Display drv" Case VFT2_DRV_MOUSE STyp = "Mouse drv" Case VFT2_DRV_NETWORK STyp = "Network drv" Case VFT2_DRV_SYSTEM STyp = "System drv" Case VFT2_DRV_INSTALLABLE STyp = "Installable" Case VFT2_DRV_SOUND STyp = "Sound drv" Case VFT2_DRV_COMM STyp = "Comm drv" Case VFT2_UNKNOWN STyp = "Unknown" End Select Case VFT_FONT Typ = "Font" Select Case VERSION.dwFileSubtype Case VFT2_FONT_RASTER STyp = "Raster Font" Case VFT2_FONT_VECTOR STyp = "Vector Font" Case VFT2_FONT_TRUETYPE STyp = "TrueType Font" End Select Case VFT_VXD Typ = "VxD" Case VFT_STATIC_LIB Typ = "Lib" Case Else Typ = "Unknown" End Select End If List1.AddString "Structure Version:" & SVer List1.AddString "File Version :" & FVer List1.AddString "Product Version :" & PVer List1.AddString "Flags :" & F List1.AddString "OS :" & OS List1.AddString "File Type :" & Typ List1.AddString "File Sub Type :" & STyp End Sub '================================================================ '= '================================================================ Declare Sub Edit1_Change edecl () Sub Edit1_Change() Var Ret As Long DisplayVerInfo sPath End Sub '================================================================ '= シェルドロップされたファイル名を取得 '================================================================ Declare Sub Edit1_DropFiles edecl (ByVal DF As Long) Sub Edit1_DropFiles(ByVal DF As Long) Var Ret As Long Ret = GetDropFileCount(DF) sPath = GetDropFileName(DF, 0) Edit1.SetWindowText sPath End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End