VerQueryValueW 函数 (winver.h)
从指定的版本信息资源中检索指定的版本信息。 若要检索相应的资源,在调用 VerQueryValue 之前,必须先调用 GetFileVersionInfoSize 函数,然后调用 GetFileVersionInfo 函数。
语法
BOOL VerQueryValueW(
[in] LPCVOID pBlock,
[in] LPCWSTR lpSubBlock,
[out] LPVOID *lplpBuffer,
[out] PUINT puLen
);
参数
[in] pBlock
类型: LPCVOID
GetFileVersionInfo 函数返回的版本信息资源。
[in] lpSubBlock
类型: LPCTSTR
要检索的版本信息值。 字符串必须由反斜杠 (\) 分隔的名称组成,并且必须具有以下形式之一。
\
根块。 函数检索指向版本信息资源的 VS_FIXEDFILEINFO 结构的指针。
\VarFileInfo\Translation
Var 变量信息结构中的转换数组 - 此结构的 Value 成员。 函数检索指向此语言和代码页标识符数组的指针。 应用程序可以使用这些标识符访问特定于语言的 StringTable 结构, (使用版本信息资源中的 szKey 成员) 。
\StringFileInfo\lang-codepage\string-name
特定于语言的 StringTable 结构中的值。 lang-codepage 名称是作为资源翻译数组中的 DWORD 找到的语言和代码页标识符对的串联。 此处的 lang-codepage 名称必须指定为十六进制字符串。 字符串名称必须是以下“备注”部分所述的预定义字符串之一。 函数检索特定于所指示语言和代码页的字符串值。
[out] lplpBuffer
类型: LPVOID*
此方法返回时,包含 指向 pBlock 指向的缓冲区中请求的版本信息的指针的地址。 释放关联的 pBlock 内存时,将释放 lplpBuffer 指向的内存。
[out] puLen
类型: PUINT
此方法返回时,包含指向 lplpBuffer 指向的请求数据大小的指针:对于版本信息值,为存储在 lplpBuffer 处的字符串的长度(以字符为单位);对于转换数组值,则为存储在 lplpBuffer 处的数组的大小(以字节为单位);对于根块,则为 结构的大小(以字节为单位)。
返回值
类型: BOOL
如果指定的版本信息结构存在,并且版本信息可用,则返回值为非零值。 如果长度缓冲区的地址为零,则没有值可用于指定的版本信息名称。
如果指定的名称不存在或指定的资源无效,则返回值为零。
注解
此函数适用于 16 位、32 位和 64 位文件映像。
下面是预定义的版本信息 Unicode 字符串。
注释 | InternalName | ProductName |
CompanyName | LegalCopyright | ProductVersion |
FileDescription | LegalTrademarks | PrivateBuild |
FileVersion | OriginalFilename | SpecialBuild |
示例
以下示例演示如何枚举可用的版本语言并检索每种语言的 FileDescription 字符串值。
在调用 VerQueryValue 之前,请务必调用 GetFileVersionInfoSize 和 GetFileVersionInfo 函数,以正确初始化 pBlock 缓冲区。
// Structure used to store enumerated languages and code pages.
HRESULT hr;
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
// Read the list of languages and code pages.
VerQueryValue(pBlock,
TEXT("\\VarFileInfo\\Translation"),
(LPVOID*)&lpTranslate,
&cbTranslate);
// Read the file description for each language and code page.
for( i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
{
hr = StringCchPrintf(SubBlock, 50,
TEXT("\\StringFileInfo\\%04x%04x\\FileDescription"),
lpTranslate[i].wLanguage,
lpTranslate[i].wCodePage);
if (FAILED(hr))
{
// TODO: write error handler.
}
// Retrieve file description for language and code page "i".
VerQueryValue(pBlock,
SubBlock,
&lpBuffer,
&dwBytes);
}
注意
winver.h 标头将 VerQueryValue 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winver.h (包括 Windows.h) |
Library | Version.lib |
DLL | Api-ms-win-core-version-l1-1-0.dll |
请参阅
概念性
引用