ファイルバージョン情報の取得 (その2)

(2004.03.25)
#include <WinVer.h>
#pragma comment(lib, "Version.lib")
 
    static HRESULT GetFixedFileVersionInfo(LPCTSTR szFileName, VS_FIXEDFILEINFO* pVal)
    {
        if (pVal == NULL)
        {
            return E_POINTER;
        }
 
        DWORD dwHandle = NULL;
        DWORD dwBlockSize = ::GetFileVersionInfoSize((LPSTR)szFileName, &dwHandle);
        if (dwBlockSize == 0) 
        {
            DWORD dwError = ::GetLastError();
            return HRESULT_FROM_WIN32(dwError);
        }
 
        BYTE* pBlock = new BYTE[dwBlockSize];
        BOOL br = ::GetFileVersionInfo((LPSTR)szFileName, dwHandle, dwBlockSize, pBlock);
        if (!br) 
        {
            DWORD dwError = ::GetLastError();
            return HRESULT_FROM_WIN32(dwError);
        }
 
        void* pSubBlock = NULL;
        UINT nSubBlockSize = 0;
        br = ::VerQueryValue(pBlock, _T("\\"), &pSubBlock, &nSubBlockSize);
        if (!br) 
        {
            DWORD dwError = ::GetLastError();
            return HRESULT_FROM_WIN32(dwError);
        }
 
        memcpy(pVal, pSubBlock, sizeof(VS_FIXEDFILEINFO));
        delete[] pBlock;
 
        return S_OK;
    }
    static CString GetVersionString(DWORD dwVersionMS, DWORD dwVersionLS)
    {
        CString strResult;
        strResult.Format(_T("%d.%d.%d.%d"), HIWORD(dwVersionMS), LOWORD(dwVersionMS), HIWORD(dwVersionLS), LOWORD(dwVersionLS));
 
        return strResult;
    }
一覧に戻る
© 2003 WAC.com All Right Reserved.