【VC++】リソース情報からバージョン情報を取得する

0

    <機能>
    リソース情報からバージョン情報を取得してメッセージボックスで出力します

    <使い方>
    構成プロパティ > 全般 > 文字セット で「マルチバイト文字セットを使用する」を選択
    関数はそのまま呼び出してください
    メッセージボックスにてバージョン情報が表示されます

    <イメージ>
    ファイルのプロパティ、.rc、リソース、バージョン、VC++  バージョン情報、.rc、リソース、バージョン、VC++ 
     

    void GetVersionInfo()

    {

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

     

        const int MAX_LEN = 2048;

        CString csMsg;

     

        CString csBuf;

        UINT uDmy;

        struct LANGANDCODEPAGE {

            WORD wLanguage;        //日本語(0411)、英語(0409)

            WORD wCodePage;

        } *lpTran;

     

        LPTSTR    pBuf = csBuf.GetBuffer(MAX_LEN + 1);

        ::GetModuleFileName(NULL, pBuf, MAX_LEN + 1);

        DWORD dwZero = 0;

        DWORD dwVerInfoSize = GetFileVersionInfoSize(pBuf, &dwZero);

     

        unsigned char *pBlock = NULL;

        pBlock = new unsigned char[dwVerInfoSize];

        ::GetFileVersionInfo(pBuf, 0, dwVerInfoSize, pBlock);

        ::VerQueryValue(pBlock, "¥¥VarFileInfo¥¥Translation", (LPVOID*)&lpTran, &uDmy);

     

        //バージョンを取得するためのバッファ

        char name[256];

        void *pVer;

     

        //ファイルの説明(FileDescription)

        wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥FileDescription", lpTran[0].wLanguage, lpTran[0].wCodePage);

        ::VerQueryValue(pBlock, name, &pVer, &uDmy);

        csBuf.Format("ファイルの説明 [%s]", pVer);

        csMsg = csBuf;

     

        //ファイルバージョン(FileVersion)

        wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥FileVersion", lpTran[0].wLanguage, lpTran[0].wCodePage);

        ::VerQueryValue(pBlock, name, &pVer, &uDmy);

        csBuf.Format("ファイルバージョン [%s]", pVer);

        csMsg += ("¥r¥n" + csBuf);

     

        //製品名(ProductName)

        wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥ProductName", lpTran[0].wLanguage, lpTran[0].wCodePage);

        ::VerQueryValue(pBlock, name, &pVer, &uDmy);

        csBuf.Format("製品名 [%s]", pVer);

        csMsg += ("¥r¥n" + csBuf);

     

        //製品バージョン(ProductVersion)

        wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥ProductVersion", lpTran[0].wLanguage, lpTran[0].wCodePage);

        ::VerQueryValue(pBlock, name, &pVer, &uDmy);

        csBuf.Format("プロダクトバージョン[%s]", pVer);

        csMsg += ("¥r¥n" + csBuf);

     

        //著作権(LegalCopyright)

        wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥LegalCopyright", lpTran[0].wLanguage, lpTran[0].wCodePage);

        ::VerQueryValue(pBlock, name, &pVer, &uDmy);

        csBuf.Format("著作権 [%s]", pVer);

        csMsg += ("¥r¥n" + csBuf);

     

        //会社名(CompanyName)

        wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥CompanyName", lpTran[0].wLanguage, lpTran[0].wCodePage);

        ::VerQueryValue(pBlock, name, &pVer, &uDmy);

        csBuf.Format("会社名 [%s]", pVer);

        csMsg += ("¥r¥n" + csBuf);

     

        //メッセージボックスで表示

        AfxMessageBox(csMsg, MB_ICONINFORMATION);

     

        delete[] pBlock;

    }

     

    よろしければポチッと押してください

    プログラマー ブログランキングへ

     



    calendar

    S M T W T F S
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
    << October 2017 >>

    profile

    others

    mobile

    qrcode