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

来源:互联网 发布:淘宝仅退款卖家不举证 编辑:程序博客网 时间:2024/05/21 18:59
 

    // 首先调用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); // 软件名称
                    }
            }
      }

原创粉丝点击