【问题标题】:What Arguments are you supposed to give to the Windows API call VerQueryValue您应该为 Windows API 调用 VerQueryValue 提供哪些参数
【发布时间】:2008-11-25 22:48:57
【问题描述】:

我知道第一个参数必须是 GetFileVersionInfo() 的结果。

第三个和第四个是目标缓冲区和大小

第二个参数 lpSubBlock 是什么?

提前致谢

【问题讨论】:

    标签: c++ windows winapi


    【解决方案1】:

    当您通过资源编辑器查看版本信息时,您可能会注意到有一个包含 FILEVERSION、PRODUCTVERISON 等的初始部分,然后是一个或多个包含特定语言设置的块。

    VS_VERSION_INFO VERSIONINFO
     FILEVERSION 5,0,0,0
     PRODUCTVERSION 5,0,0,0
     FILEFLAGSMASK 0x3fL
    #ifdef _DEBUG
     FILEFLAGS 0x1L
    #else
     FILEFLAGS 0x0L
    #endif
     FILEOS 0x40004L
     FILETYPE 0x2L
     FILESUBTYPE 0x0L
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "040904b0"
            BEGIN
                VALUE "CompanyName", ""
                VALUE "FileVersion", "5, 0, 0, 0"
                VALUE "ProductName", ""
                VALUE "ProductVersion", "5, 0, 0, 0"
            END
            BLOCK "000004b0"
            BEGIN
                VALUE "CompanyName", ""
                VALUE "FileVersion", "5, 0, 0, 0"
                VALUE "ProductName", ""
                VALUE "ProductVersion", "5, 0, 0, 0"
            END
        END
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", 0x0, 1200, 0x409, 1200
        END
    END
    

    要获得具有非语言特定详细信息的 VS_FIXEDFILEINFO,请使用

    VS_FIXEDFILEINFO *versionInfo;
    PUINT versionInfoSize;
    VerQueryValue(buffer.get(), TEXT("\\"), (void**) &versionInfo, &versionInfoSize))
    

    要了解支持的语言,请使用

    Var *translationsInfo;
    PUINT transaltionInfoSize;
    VerQueryValue(buffer.get(), TEXT("\\VarFileInfo\\Translation"), (void**) &translationsInfo, &transaltionInfoSize))
    

    要获取特定语言的版本详细信息,然后使用

    StringTable *stringTable;
    PUINT stringTableSize;
    std::wstring path( L"\\StringFileInfo\\" );
    path += L"040904b0";  // get this value from the language support list
    path += L"\\FileVersion";
    VerQueryValue(buffer.get(), path.c_str(), (void**) &stringTable, &stringTableSize))
    

    【讨论】:

      【解决方案2】:

      它必须是一个字符串,您可以在此处找到其格式:
      http://www.hep.wisc.edu/~pinghc/books/apirefeng/v/verqueryvalue.html

      还有一个用法示例(VB中,易读):
      http://support.microsoft.com/kb/160042

      您还可以查看整个 CodeProject 文章以获取 C++ 中的工作示例:
      http://www.codeproject.com/KB/cpp/GetLocalVersionInfos.aspx

      另一篇关于检索版本信息的文章:
      http://www.microsoft.com/msj/0498/c0498.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-19
        • 2021-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多