Функция 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. Память, на которую указывает lplpBuffer , освобождается при освобождении связанной памяти pBlock .
[out] puLen
Тип: PUINT
При возврате этого метода содержит указатель на размер запрошенных данных, на которые указывает lplpBuffer: для значений сведений о версии — длина в символах строки, хранящейся в lplpBuffer; для значений массива преобразования — размер в байтах массива, хранящегося в lplpBuffer; а для корневого блока — размер структуры в байтах.
Возвращаемое значение
Тип: BOOL
Если указанная структура сведений о версии существует и сведения о версии доступны, возвращаемое значение не равно нулю. Если адрес буфера длины равен нулю, значение для указанного имени сведений о версии недоступно.
Если указанное имя не существует или указанный ресурс недопустим, возвращаемое значение равно нулю.
Комментарии
Эта функция работает с 16-, 32- и 64-разрядными образами файлов.
Ниже приведены предопределенные строки юникода со сведениями о версии.
Комментарии | InternalName | ProductName |
CompanyName | LegalCopyright | ProductVersion |
FileDescription | LegalTrademarks | PrivateBuild |
FileVersion | OriginalFilename | SpecialBuild |
Примеры
В следующем примере показано, как перечислить доступные языки версий и получить строковое значение FileDescription для каждого языка.
Обязательно вызовите функции GetFileVersionInfoSize и GetFileVersionInfo перед вызовом VerQueryValue для правильной инициализации буфера 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 в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winver.h (включая Windows.h) |
Библиотека | Version.lib |
DLL | Api-ms-win-core-version-l1-1-0.dll |
См. также раздел
Основные понятия
Справочные материалы