Функция GetVersionExW (sysinfoapi.h)
[GetVersionEx может быть изменен или недоступен для выпусков после Windows 8.1. Вместо этого используйте функции вспомогательной службы версий]
С выпуском Windows 8.1 поведение API GetVersionEx изменилось в значении, которое он будет возвращать для версии операционной системы. Значение, возвращаемое функцией GetVersionEx , теперь зависит от манифеста приложения.
Приложения, не манифестированные для Windows 8.1 или Windows 10, возвращают значение версии ОС Windows 8 (6.2). После манифеста приложения для заданной версии операционной системы GetVersionEx всегда будет возвращать версию, для которую приложение будет манифестировано в будущих выпусках. Сведения о манифестации приложений для Windows 8.1 или Windows 10 см. в статье Назначение приложения для Windows.
Синтаксис
NOT_BUILD_WINDOWS_DEPRECATE BOOL GetVersionExW(
[in, out] LPOSVERSIONINFOW lpVersionInformation
);
Параметры
[in, out] lpVersionInformation
Структура OSVERSIONINFOW или OSVERSIONINFOEXW , которая получает сведения об операционной системе.
Перед вызовом функции GetVersionEx задайте член dwOSVersionInfoSize структуры соответствующим образом, чтобы указать, какая структура данных передается в эту функцию.
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение будет ненулевым.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError. Функция завершается ошибкой, если указано недопустимое значение для члена dwOSVersionInfoSize структуры OSVERSIONINFOW или OSVERSIONINFOEXW .
Комментарии
Определение текущей операционной системы обычно не является лучшим способом определить, присутствует ли определенная функция операционной системы. Это связано с тем, что в операционной системе могли быть добавлены новые функции в распространяемой библиотеке DLL. Вместо того, чтобы использовать GetVersionEx для определения платформы операционной системы или номера версии, проверьте наличие самой функции. Дополнительные сведения см. в разделе Версия операционной системы.
Функция GetSystemMetrics предоставляет дополнительные сведения о текущей операционной системе.
Продукт | Параметр |
---|---|
Windows XP Media Center Edition | SM_MEDIACENTER |
Windows XP Starter Edition | SM_STARTER |
Windows XP Tablet PC Edition | SM_TABLETPC |
Windows Server 2003 R2 | SM_SERVERR2 |
Чтобы проверка для определенных операционных систем или функций операционной системы, используйте функцию IsOS. Функция GetProductInfo извлекает тип продукта.
Чтобы получить сведения об операционной системе на удаленном компьютере, используйте функцию NetWkstaGetInfo , класс WMI Win32_OperatingSystem или свойство OperatingSystem интерфейса IADsComputer .
Чтобы сравнить текущую версию системы с требуемой версией, используйте функцию VerifyVersionInfo вместо того, чтобы выполнить сравнение самостоятельно с помощью GetVersionEx .
Если режим совместимости действует, функция GetVersionEx сообщает об операционной системе по мере ее идентификации, которая может не быть установленной операционной системой. Например, если режим совместимости действует, GetVersionEx сообщает об операционной системе, выбранной для обеспечения совместимости приложений.
Примеры
При использовании функции GetVersionEx для определения того, работает ли приложение в определенной версии операционной системы, проверка для номеров версий, которые больше или равны требуемым номерам версий. Это гарантирует успешное выполнение теста для более поздних версий операционной системы. Например, если приложению требуется Windows XP или более поздней версии, используйте следующий тест.
#include <windows.h>
#include <stdio.h>
void main()
{
OSVERSIONINFO osvi;
BOOL bIsWindowsXPorLater;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
bIsWindowsXPorLater =
( (osvi.dwMajorVersion > 5) ||
( (osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1) ));
if(bIsWindowsXPorLater)
printf("The system meets the requirements.\n");
else printf("The system does not meet the requirements.\n");
}
Пример, определяющий текущую операционную систему, см. в разделе Получение версии системы.
Примечание
Заголовок sysinfoapi.h определяет GetVersionEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows 2000 Профессиональная [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows 2000 Server [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | sysinfoapi.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |