Как определить Windows 11 с помощью Delphi 10.3.3
Я использую функцию TOSVersion.ToString (использует SysUtils) для определения версии Windows. Однако вот что я получаю в Windows11:
Windows 10 (Version 10.0, Build 21996, 64-bit Edition)
Есть ли надежный способ обнаружить Windows 11? Я использую Delphi 10.3.3.
4 ответа
Как заметил Реми: используя WinAPI, вы рискуете оказаться в каком-то .
Одна из альтернатив - проверить версию файла ожидаемых файлов, т. Е.
-
%windir%\system32\ntoskrnl.exe
или -
%windir%\explorer.exe
с использованием
GetFileVersionInfo()
а такжеVerQueryValue()
- вHiWord(dwFileVersionLS)
должно быть или выше (в соответствии с номером сборки / выпуска Windows NT ).-
Другой - посмотреть в реестре под
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
при текстовых значенияхCurrentBuild
а такжеCurrentBuildNumber
, проверяя, является ли наивысшее из обоих22000
или выше.Дэвид уже написал подробный ответ в разделе « режиме совместимости, в результате чего сообщаемая версия будет ниже фактическойПроверка версии Windows на W10» с еще большим количеством альтернатив, хотя сконцентрировался на высоких / низких номерах версий, а не на сборке. Но WMI может помочь .
(Это работает только ретроспективно с подтвержденными знаниями.) Проверьте, какие экспортные API доступны: идея состоит в том, что определенные функции были введены в определенных выпусках / версиях Windows, поэтому, если импорт не удастся для одного, вы знаете, что используете версию ниже. Устаревший пример и устаревший список минимальных версий на функцию даст вам идею. Теперь вам «только» нужно выяснить, какие новые функции представлены в Windows 11.
Все они не пуленепробиваемые, но вы можете комбинировать их и делать выводы. И после всего этого вы все равно можете попробовать свой подход к синтаксическому анализу текстов, а не полагаться только на числа. Он также показывает, насколько легко вы можете манипулировать своей системой для создания отчетов о различных версиях в зависимости от того, какой метод используется.
Официальный основной номер версии для Windows 11 — 10.
Официальный номер сборки общедоступной предварительной версии Windows 11 — 10.0.22000.168.
Более ранние сборки:
- 10.0.22000.71
- 10.0.22000.65
- 10.0.22000.51
Часто задаваемые вопросы по Microsoft Windows 11
Если вы хотите обнаружить предварительные версии, самый ранний номер сборки был 10.0.22000.51 . История версий Windows 11.
полагается на некоторые жестко закодированные имена и логику для возврата имени ОС. Вам придется реализовать собственное обнаружение, скопировать и изменить
TOSVersion
запишите или создайте обертку вокруг него, где вы можете использовать существующую логику для более старых версий и реализовать проверку на основе номера сборки Windows 11 для обнаружения Windows 11.
Для других общих вопросов и подходов к определению версии ОС вы можете обратиться к ответу AmigoJack.
За исключением очень слабого, по крайней мере для меня, решения рассматривать сборки Windows 10 выше 22000, такие как Windows 11, единственное решение, которое я нашел, которое действительно работает, — это
WMIs Win32_OperatingSystem class - Caption
имущество.
На моей машине dev Win10 он дает следующую строку:
Microsoft Windows 10 Pro
.
На моей другой машине разработчика с установленной Win11 та же функция дает:
Microsoft Windows 11 Pro
.
Разница заключается в строковых значениях — «10» против «11», но это, по крайней мере, намного лучше, чем решение «создать больше, чем».
C# и C++ работают хорошо.
Самый простой способ — получить версию Kernel32.dll, и если основная версия равна 10, а версия сборки >= 22000, то у вас Windows 11.
См. мой код здесь: Как найти название продукта Windows в Windows 11?