VerQueryValueA 函数 (winver.h)
从指定的版本信息资源检索指定的版本信息。 若要检索适当的资源,在调用 VerQueryValue之前,必须先调用 GetFileVersionInfoSize 函数,然后调用 GetFileVersionInfo 函数。
语法
BOOL VerQueryValueA(
[in] LPCVOID pBlock,
[in] LPCSTR lpSubBlock,
[out] LPVOID *lplpBuffer,
[out] PUINT puLen
);
参数
[in] pBlock
类型:LPCVOID
GetFileVersionInfo 函数返回的版本信息资源。
[in] lpSubBlock
类型:LPCTSTR
要检索的版本信息值。 该字符串必须由反斜杠(\)分隔的名称组成,并且必须具有以下形式之一。
\
根块。 该函数检索指向版本信息资源的 VS_FIXEDFILEINFO 结构的指针。
\VarFileInfo\Translation
Var 中的转换数组 变量信息结构,即此结构的 值 成员。 该函数检索指向此语言和代码页标识符数组的指针。 应用程序可以使用这些标识符访问版本信息资源中特定于语言的 stringTable 结构(使用 szKey 成员)。
\StringFileInfo\lang-codepage\string-name
特定于语言的 StringTable 结构中的值。 lang-codepage 名称是语言和代码页标识符对的串联,在资源的翻译数组中,DWORD。 此处 lang-codepage 名称必须指定为十六进制字符串。 字符串名称 名称必须是以下“备注”部分所述的预定义字符串之一。 该函数检索特定于所指示语言和代码页的字符串值。
[out] lplpBuffer
类型:LPVOID*
此方法返回时,包含指向 pBlock指向的缓冲区中请求的版本信息的指针的地址。 当释放关联的 pBlock 内存时,将释放由 lpBuffer 指向的内存。
[out] puLen
类型:PUINT
此方法返回时,包含指向 lpBuffer所指向的请求数据的大小的指针:对于版本信息值,存储在 lpBuffer处的字符串长度(以字符为单位);对于转换数组值,存储在 lpBuffer处的数组的大小(以字节为单位);对于根块,结构的大小(以字节为单位)。
返回值
类型: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 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | winver.h (包括 Windows.h) |
库 | Version.lib |
DLL | Api-ms-win-core-version-l1-1-0.dll |
另请参阅
概念
参考