2009年8月24日月曜日

バージョン情報の取得

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 件のコメント:

コメントを投稿