【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
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
    << July 2018 >>

    profile

    others

    mobile

    qrcode         スマホ表示に戻す