JEDI JCL уже делает это, даже на версиях старше, чем XE2. См. Ответ Дэвида о встроенном решении в XE2 и более поздних версиях.
Используя JCL Jedi, вы можете добавить модуль 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-разрядного целого со знаком в установщике стало отрицательным, что нарушило установщик. Я должен был установить это в VM, чтобы заставить это работать. Добавление «умного кода» часто делает ваше приложение «глупее». Будьте осторожны.
Между прочим, я обнаружил, что из командной строки вы можете запустить WMIC.exe и набрать path Win32_OperatingSystem
(«Выбрать * из Win32_OperatingSystem» у меня не работает). В будущем, возможно, JCL может быть расширен для использования информации WMI.