Поделиться через


Функция 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

См. также раздел

Основные понятия

GetFileVersionInfo

GetFileVersionInfoSize

Справочные материалы

String

StringFileInfo

StringTable

VS_FIXEDFILEINFO

VS_VERSIONINFO

Var

VarFileInfo

Сведения о версии