[英]What Arguments are you supposed to give to the Windows API call VerQueryValue
我理解第一個參數必須是GetFileVersionInfo()的結果。
第三個和第四個是目標緩沖區和大小
第二個參數是什么,lpSubBlock?
提前致謝
當您通過資源編輯器查看版本信息時,您可能會注意到有一個包含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))
它必須是一個字符串,其格式可以在這里找到:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.