windows.h
をインクルードし,version.lib
をリンクするよう設定します.
#include <windows.h> #pragma comment ( lib , "version.lib" )
バージョン情報を取得するための準備
GetFileVersionInfoSize
関数,
GetFileVersionInfo
関数
//// // バージョン情報のサイズを取得する LPTSTR lpFileName = TEXT("module-filename"); DWORD dwHandle; DWORD cbVersionInfoSize = ::GetFileVersionInfoSize( pFileName, &dwHandle ); /* Error if( ! cbVersionInfoSize ) */ //// // バージョン情報を取得する為のメモリを確保する LPVOID pVersionInfo = ::HeapAlloc( ::GetProcessHeap(), NULL, cbVersionInfoSize ) ); /* Error if( ! pVersionInfo ) : メモリが確保できればHeapAlloc関数でなくてもよい */ //// // バージョン情報を取得する ::GetFileVersionInfo( pFileName, dwHandle, cbVersionInfoSize, pVersionInfo ); /* Error if( ! returned-value ) */
VS_FIXEDFILEINFO
構造体を取得する
VerQueryValue
関数,
VS_FIXEDFILEINFO
構造体
//// // VS_FIXEDFILEINFO構造体のアドレスを取得する VS_FIXEDFILEINFO* pFixedFileInfo; UINT cbSize; ::VerQueryValue( pVersionInfo, TEXT("\\"), reinterpret_cast<LPVOID*>(&pFixedFileInfo), &cbSize ) /* Error if( ! returned-value ) */
製品バージョンとファイルバージョンは,VS_FIXEDFILEINFO
構造体に含まれています.
ただし,HIWORD( dw*MS )
,LOWORD( dw*MS )
,HIWORD( dw*LS )
,LOWORD( dw*LS )
の順番です.
バージョン情報を取得するために確保したメモリの開放を忘れないように.
プロセスにロードされているモジュールのバージョン情報を取得する場合には,別の方法も使えるようです.
バージョン情報を取得しよう
0 件のコメント:
コメントを投稿