Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обнаружение Windows 11: Проблемы и Решения в Delphi 10.3.3

Delphi , ОС и Железо , Windows

Вопрос обнаружения операционной системы Windows 11 с использованием Delphi 10.3.3 может быть непростой задачей из-за изменений, внесенных Microsoft в систему идентификации версий. Разработчики, привыкшие использовать функцию TOSVersion.ToString, столкнулись с тем, что даже на Windows 11, функция возвращает информацию о Windows 10.

Проблема

Разработчики, использующие функцию TOSVersion.ToString для определения версии Windows, столкнулись с тем, что при работе с Windows 11, функция продолжает отображать версию Windows 10, несмотря на то, что номер сборки превышает 21996. Это связано с тем, что Microsoft скрывает информацию о версии в новых версиях операционной системы, что затрудняет стандартные методы определения версии.

Решение

Для решения этой проблемы можно использовать несколько подходов:

  1. Проверка версии файла: Можно проверить версию файлов, таких как ntoskrnl.exe или explorer.exe, используя функции GetFileVersionInfo() и VerQueryValue(). Если старший 16-битный сегмент номера файловой версии (HiWord(dwFileVersionLS)) больше или равен 22000, это может указывать на Windows 11.

  2. Проверка реестра: В реестре Windows под ключом HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ хранятся значения CurrentBuild и CurrentBuildNumber. Проверка этих значений на большее или равное 22000 может быть признаком Windows 11.

  3. Использование WMI: С помощью класса Win32_OperatingSystem и свойства Caption можно попытаться определить версию операционной системы по строковому описанию.

  4. Проверка доступности API: Некоторые функции были введены только в определенных версиях Windows, и если определенная функция недоступна, это может указывать на то, что система ниже требуемой версии.

  5. Проверка версии Kernel32.dll: Если основная версия равна 10, а номер сборки больше или равен 22000, это может указывать на Windows 11.

Пример кода на Object Pascal (Delphi)

uses
  System.SysUtils,
  System.Diagnostics,
  System.Winapi;

function IsWindows11: Boolean;
var
  FileVersionInfo: TFileVersionInfo;
  FileVersionData: array[0] of Byte;
  FileVersionString: string;
  FileVersionOS: DWORD;
begin
  Result := False;
  // Путь к файлу, например, System32\kernel32.dll
  if GetFileVersionInfo(PChar('C:\Windows\System32\kernel32.dll'), 0, SizeOf(FileVersionData), @FileVersionData) then
  begin
    if VerQueryValue(@FileVersionData[0], '\', FileVersionData[0], SizeOf(FileVersionString)) then
    begin
      FileVersionString := PChar(FileVersionData[0]);
      // Парсинг строки для получения основной версии и номера сборки
      // Проверка на Windows 11
    end;
  end;
end;

Заключение

Для надежного обнаружения Windows 11 в приложениях, написанных на Delphi 10.3.3, разработчикам следует использовать комбинацию методов, описанных выше. Важно понимать, что каждый из этих методов имеет свои ограничения и может потребовать дополнительной проверки и адаптации под конкретные требования приложения.

Создано по материалам из источника по ссылке.

Разработчики столкнулись с проблемой определения операционной системы Windows 11 в Delphi 10.3.3 из-за изменений в системе идентификации версий, внесенных Microsoft, и ищут эффективные решения для корректного обнаружения версии ОС.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:15:04/0.0051629543304443/1