Windows Programming TIPS

ファイルバージョン情報の取得

[戻る] [Top]

ファイルのバージョン情報を取得するにはVersion関数群を使用します。
バージョン情報とはファイルのプロパティのバージョン情報タブで参照できる情報のことです。
ファイルバージョン、説明、著作権などの情報が格納されています。
GetFileVersionInfo関数を呼び出し、バージョン情報ハンドルを取り出し、この中から、VerQueryValueを使用してルートの情報(VS_FIXEDFILEINFO)を取り出します。
VS_FIXEDFILEINFOのdwFileVersionMSとdwFileVersionLSメンバがバージョン情報です。
通常、バージョン番号は1.2.3.4という形式なので、それぞれをハイワードと、ローワードに分ければ、OKです。

以下は、サンプルです。

----
#pragma comment(lib, "version.lib")

/* #GetFileVersion---ファイルバージョンを取り出す */
bool GetFileVersion(LPCTSTR lpszFileName,
                    LPWORD lpwVerVal1, LPWORD lpwVerVal2,
                    LPWORD lpwVerVal3, LPWORD lpwVerVal4)
{
    bool fResult = false;
    int len = _tcslen(lpszFileName);
    LPTSTR lpszPath = new TCHAR[sizeof(TCHAR)*(len+1)];
    _tcscpy(lpszPath, lpszFileName);
    DWORD dwVerHnd;
    DWORD dwVerInfoSize;
    dwVerInfoSize = GetFileVersionInfoSize(lpszPath, &dwVerHnd);
    if (dwVerInfoSize > 0) {
        HANDLE  hMem;
        LPVOID  lpvMem;
        hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
        lpvMem = GlobalLock(hMem);
        if (GetFileVersionInfo(lpszPath, dwVerHnd, dwVerInfoSize, lpvMem)) {
            VS_FIXEDFILEINFO* pFileInfo;
            UINT nSize = 0;
            BOOL bRet = VerQueryValue(lpvMem, _TEXT("\\"), (LPVOID*)&pFileInfo, &nSize);
            fResult = bRet?true:false;
            *lpwVerVal1 = HIWORD(pFileInfo->dwFileVersionMS);
            *lpwVerVal2 = LOWORD(pFileInfo->dwFileVersionMS);
            *lpwVerVal3 = HIWORD(pFileInfo->dwFileVersionLS);
            *lpwVerVal4 = LOWORD(pFileInfo->dwFileVersionLS);
        }
        GlobalUnlock(hMem);
        GlobalFree(hMem);
    }
    delete lpszPath;
    return fResult;
}
------

更新履歴

・2000/8/23 HIWORD,LOWORDマクロを使用するようにした。
・2000/8/18 作成


このページについてのご意見、ご感想、ご質問、ご要望、間違いの指摘等は
西川真人: m-nishikawa@nifty.comまで