三日月館【別館】開発・制作Tips集

[WinAPI] 実行ファイルのプロパティから製品バージョンの文字列を取得する

最終更新:

fumiduki1985

- view
管理者のみ編集可
Windowsの実行ファイル(*.exe)のプロパティの「詳細」タブ > 製品バージョン で確認できる文字列を取得するには下記のようにWindows APIを使用する。
下記記述例ではいろいろ省略しているが、それぞれのAPIのエラー時にはバッファの解放など気を付けるべき。

記述例:
LPTSTR filepath = L"myApplication.exe"; // 製品バージョンを取得したいexeファイル名

DWORD handle;
DWORD infoBytes = GetFileVersionInfoSize(filepath, &handle);
if (infoBytes == 0) {
  // バージョン情報の取得エラー
}

BYTE* versionInfoBuf = new BYTE[infoBytes];
if (!GetFileVersionInfo(filepath, handle, infoBytes, versionInfoBuf)) {
  // バージョン情報の取得エラー
}

LPVOID fileInfoBuf;
UINT fileInfoBytes;
if (!VerQueryValue(versionInfoBuf, L"\\VarFileInfo\\Translation", &fileInfoBuf, &fileInfoBytes)) {
  // バージョン情報の取得エラー
}

LPVOID fileVerBuf;
UINT fileVerBytes;
TCHAR langCodepage[256];
wsprintf(langCodepage ,
  L"\\StringFileInfo\\%04x%04x\\FileVersion", 
  LOWORD(*(LPDWORD)fileInfoBuf), HIWORD(*(LPDWORD)fileInfoBuf));

if (!VerQueryValue(versionInfoBuf, langCodepage, &fileVerBuf, &fileVerBytes)) {
  // バージョン情報の取得エラー
}

// この appVerString が「製品バージョン」の文字列になる
const TCHAR* appVerString = (const TCHAR*)fileVerBuf;

delete[] versionInfoBuf;


このページのタグ一覧
C/CPP WinAPI Windows プログラミング

記事メニュー
ウィキ募集バナー