【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¥    ranslation", (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
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
    << March 2018 >>

    profile

    others

    mobile

    qrcode         スマホ表示に戻す