获取版本信息Version的完整代码(从msdn扩展而来)

    技术2022-05-18  12

        // 首先调用GetFileVersionInfoSize获取版本号长度    String MyName = "C://Maxthon.exe";    DWORD NoUse = 0;  //没有什么用    DWORD InfoSize = ::GetFileVersionInfoSize(MyName.c_str(), &NoUse);    // 有效的长度    if (InfoSize > 0)    {        auto_ptr<char> VersionInfo(new char[InfoSize]);        if(true == ::GetFileVersionInfo(MyName.c_str(),NoUse,InfoSize,VersionInfo.get())) // 获取版本信息成功        {            char *pValue = NULL;            UINT ValueLen;            String FileInfo = "//StringFileInfo//";

                //抄MSDN的代码            struct LANGANDCODEPAGE {                WORD wLanguage;                WORD wCodePage;            } *lpTranslate;

                //default 0x0804 /StringFileInfo/lang-codepage/string-name            if (true == ::VerQueryValue(VersionInfo.get(), "//VarFileInfo//Translation", (LPVOID *)&lpTranslate, &ValueLen))            {                if (ValueLen / sizeof(LANGANDCODEPAGE) >= 1)                {                    FileInfo = FileInfo + IntToHex(lpTranslate[0].wLanguage, 4)+  IntToHex(lpTranslate[0].wCodePage,4) + "//"; // 这一步很关键哦

                        if (true == ::VerQueryValue(VersionInfo.get(), String(FileInfo + "ProductName").c_str(), (LPVOID *)&pValue, &ValueLen)) // 获取ProductName信息,ProductVersion等                    {                        String sSoftwareName = String(pValue); // 软件名称                    }            }      }


    最新回复(0)