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

Узнать версию Windows

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

Узнать версию Windows

Бог создал мир за семь дней и до сих пор система работает, не требуя перезагрузки, потому что у него не было необходимости поддерживать совместимость с предыдущими версиями.


type
  TWinVersion = (wvUnknown, wv95, wv98, wvME, wvNT3, wvNT4, wvW2K, wvXP);

function DetectWinVersion: TWinVersion;
var
  OSVersionInfo: TOSVersionInfo;
begin
  Result := wvUnknown;
  OSVersionInfo.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
  if GetVersionEx(OSVersionInfo) then
  begin
    case OSVersionInfo.DwMajorVersion of
      3: Result := wvNT3;
      4: case OSVersionInfo.DwMinorVersion of
          0: if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
              Result := wvNT4
            else
              Result := wv95;
          10: Result := wv98;
          90: Result := wvME;
        end;
      5: case OSVersionInfo.DwMinorVersion of
          0: Result := wvW2K;
          1: Result := wvXP;
        end;
    end;
  end;
end;

function DetectWinVersionStr: string;
const
  VersStr: array[TWinVersion] of string = (
    'Unknown',
    'Windows 95',
    'Windows 98',
    'Windows ME',
    'Windows NT 3',
    'Windows NT 4',
    'Windows 2000',
    'Windows XP');
begin
  Result := VersStr[DetectWinVersion];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Ver := DetectWinVersion;
  Label1.Caption := IntToStr(Ord(DetectWinVersion));
  Label2.Caption := DetectWinVersionStr;
end;

Программа на Delphi, которая определяет версию Windows, установленную на системе, и отображает ее в двух метках на форме.

Вот шаг за шагом, как она работает:

  1. Перечисление TWinVersion определяет возможные версии Windows.
  2. Функция DetectWinVersion использует API GetVersionEx для получения информации о операционной системе, включая ее основное и минорное номера версий.
  3. На основе этой информации функция determines, какой версии Windows установлен на системе, и возвращает соответствующее значение из перечисления TWinVersion.
  4. Функция DetectWinVersionStr принимает результат DetectWinVersion и использует его для индексации в массиве строк, содержащем названия каждой версии Windows.
  5. В обработчик события Button1Click программа вызывает DetectWinVersion и затем использует ее результат для установки заголовков двух меток на форме.

Вот некоторые примечания о коде:

  • API GetVersionEx используется для получения информации о операционной системе. Это API было введено в Windows NT 4.0.
  • Код не обрабатывает все возможные версии Windows, включая новые, такие как Vista, Seven, Eight, Ten и т.д.
  • Код использует простой массив строк для хранения названий каждой версии Windows. Это не идеально из-за следующих причин: это не локализовано, не легко поддерживать или обновлять, и не масштабируемо.

Вот некоторые альтернативные решения:

  1. Вместо использования перечисления можно использовать TStringList для хранения названий каждой версии Windows. Это позволит легко добавлять или удалять версии из списка.
  2. Можно использовать более сложный метод определения версии Windows, например, парсинг вывода команды ver или использование API GetWindowsVersion.
  3. Если вам нужно поддерживать несколько языков, можно хранить названия каждой версии Windows в файле ресурсов и использовать функцию LoadString для их получения.
  4. Можно использовать более современные возможности Delphi, такие как generics или interfaces, чтобы сделать код более гибким и поддерживаемым.

Вот обновленная версия кода, которая использует TStringList вместо перечисления:

type
  TWinVersion = class(TObject)
  private
    FVersStr: TStringList;
  public
    constructor Create;
    function GetVersion: string;
  end;

constructor TWinVersion.Create;
begin
  FVersStr := TStringList.Create;
  FVersStr.Add('Unknown');
  FVersStr.Add('Windows 95');
  FVersStr.Add('Windows 98');
  // ...
end;

function TWinVersion.GetVersion: string;
var
  OSVersionInfo: TOSVersionInfo;
begin
  Result := '';
  OSVersionInfo.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
  if GetVersionEx(OSVersionInfo) then
    case OSVersionInfo.dwMajorVersion of
      3: Result := FVersStr[1];
      // ...
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Ver := TWinVersion.Create;
  Label1.Caption := IntToStr(Ord(TWinVersion.GetVersion));
  Label2.Caption := TWinVersion.GetVersion;
end;

Обратите внимание, что это только один из возможных способов реализации более гибкого и поддерживаемого кода. Есть много других способов сделать это, в зависимости от вашей конкретной задачи и ограничений.

В статье описывается функция для определения версии операционной системы Windows, которая может быть использована в Delphi и позволяет вывести строковое описание версии ОС на экран.


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

Получайте свежие новости и обновления по 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 09:27:06/0.0062949657440186/0