Примечание. Габр спрашивает о подходе, который может обойти ограничения GetVersionEx
. Код JCL использует GetVersionEx и, таким образом, зависит от уровня совместимости. Эта информация предназначена только для людей, которым не нужно обходить уровень совместимости.
Используя Jedi JCL, вы можете добавить модуль JclSysInfo и вызвать функцию GetWindowsVersion
. Он возвращает перечислимый тип TWindowsVersion.
В настоящее время JCL содержит все поставляемые версии Windows и изменяется каждый раз, когда Microsoft отправляет новую версию Windows в коробке:
TWindowsVersion =
(wvUnknown, wvWin95, wvWin95OSR2, wvWin98, wvWin98SE, wvWinME,
wvWinNT31, wvWinNT35, wvWinNT351, wvWinNT4, wvWin2000, wvWinXP,
wvWin2003, wvWinXP64, wvWin2003R2, wvWinVista, wvWinServer2008,
wvWin7, wvWinServer2008R2);
Если вы хотите узнать, используете ли вы 64-битную Windows 7 вместо 32-битной, позвоните JclSysInfo.IsWindows64
.
Обратите внимание, что JCL allso обрабатывает выпуски, такие как Pro, Ultimate и т. Д. Для этого вызова GetWindowsEdition, он возвращает одно из следующих:
TWindowsEdition =
(weUnknown, weWinXPHome, weWinXPPro, weWinXPHomeN, weWinXPProN, weWinXPHomeK,
weWinXPProK, weWinXPHomeKN, weWinXPProKN, weWinXPStarter, weWinXPMediaCenter,
weWinXPTablet, weWinVistaStarter, weWinVistaHomeBasic, weWinVistaHomeBasicN,
weWinVistaHomePremium, weWinVistaBusiness, weWinVistaBusinessN,
weWinVistaEnterprise, weWinVistaUltimate, weWin7Starter, weWin7HomeBasic,
weWin7HomePremium, weWin7Professional, weWin7Enterprise, weWin7Ultimate);
Для исторического интереса вы также можете проверить версию уровня NT с помощью функции NtProductType, она возвращает:
TNtProductType = (ptUnknown, ptWorkStation, ptServer, ptAdvancedServer,
ptPersonal, ptProfessional, ptDatacenterServer,
ptEnterprise, ptWebEdition);
Обратите внимание, что выше обнаружено "N выпусков". Это версия Windows для ЕС (Европы), созданная в соответствии с антимонопольными правилами ЕС. Это довольно хорошая градация обнаружения внутри JCL.
Вот пример функции, которая поможет вам обнаружить Vista и сделать что-то особенное в Vista.
function IsSupported:Boolean;
begin
case GetWindowsVersion of
wvVista: result := false;
else
result := true;
end;
end;
Обратите внимание, что если вы хотите выполнить проверку «больше, чем», вам следует просто использовать другие методы. Также обратите внимание, что проверка версии часто может стать источником поломки в будущем. Обычно я предпочитаю предупреждать пользователей и продолжать, чтобы мой двоичный код не стал фактическим источником поломки в будущем.
Недавно я попытался установить приложение, и установщик проверил свободное место на моем диске и не смог установить, потому что у меня было более 2 гигабайт свободного места. 32-битное целое число со знаком в программе установки стало отрицательным, что нарушило работу программы установки. Мне пришлось установить его в виртуальную машину, чтобы заставить его работать. Добавление «умного кода» часто делает ваше приложение «глупее». Будьте осторожны.
Между прочим, я обнаружил, что из командной строки вы можете запустить WMIC.exe и ввести path Win32_OperatingSystem
(«Выбрать * из Win32_OperatingSystem» у меня не сработало). Возможно, в будущем JCL можно будет расширить для использования информации WMI.
person
Warren P
schedule
14.11.2011