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

Как узнать версию Windows 2

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

Как узнать версию Windows 2

Этот пример должен работать на всех версиях Windows


{$IFDEF WIN32}

function GetVersionEx(lpOs: pointer): BOOL; stdcall;
  external 'kernel32' name 'GetVersionExA';
{$ENDIF}

procedure GetWindowsVersion(var Major: integer;
  var Minor: integer);
var
{$IFDEF WIN32}
  lpOS, lpOS2: POsVersionInfo;
{$ELSE}
  l: longint;
{$ENDIF}
begin
{$IFDEF WIN32}
  GetMem(lpOS, SizeOf(TOsVersionInfo));
  lpOs^.dwOSVersionInfoSize := SizeOf(TOsVersionInfo);
  while getVersionEx(lpOS) = false do begin
    GetMem(lpos2, lpos^.dwOSVersionInfoSize + 1);
    lpOs2^.dwOSVersionInfoSize := lpOs^.dwOSVersionInfoSize + 1;
    FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
    lpOS := lpOs2;
  end;
  Major := lpOs^.dwMajorVersion;
  Minor := lpOs^.dwMinorVersion;
  FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
{$ELSE}
  l := GetVersion;
  Major := LoByte(LoWord(l));
  Minor := HiByte(LoWord(l));
{$ENDIF}
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Major: integer;
  Minor: integer;
begin
  GetWindowsVersion(Major, Minor);
  Memo1.Lines.Add(IntToStr(Major));
  Memo1.Lines.Add(IntToStr(Minor));
end;

Программа на Delphi, которая получает версию операционной системы Windows и отображает ее в контроле Memo.

GetVersionEx функция Функция GetVersionEx объявлена как внешний процедура из библиотеки kernel32, которая является частью API Windows. Она принимает указатель на структуру OsVersionInfo в качестве входного параметра и возвращает булевое значение, указывающее, была ли операция успешной.

GetWindowsVersion процедура Процедура GetWindowsVersion получает номера версии операционной системы. Если она компилирована для Win32 (то есть 32-разрядного Windows), то она использует функцию GetVersionEx для получения информации о версии. Если не компилирована для Win32, то она использует функцию GetVersion вместо этого.

Для Win32 платформы процедура аллокирует память для структуры OsVersionInfo и устанавливает ее размер в соответствии с ожидаемым размером структуры. Затем она вызывает GetVersionEx в цикле, пока операция не будет успешной. После успешной операции она извлекает номера версии из структуры и освобождает аллокированную память.

Для платформ, не поддерживающих Win32 (например, Win16), процедура использует функцию GetVersion для получения информации о версии. Функция возвращает 32-разрядное значение, представляющее номера версии, которые затем извлекаются с помощью битовой манипуляции.

Button1Click событие Событие Button1Click вызывается, когда пользователь нажимает кнопку на форме. Оно вызывает процедуру GetWindowsVersion для получения номеров версии операционной системы и отображает их в контроле Memo.

Замечания

  • Программа использует встроенные возможности Delphi для поддержки платформ Win32 и Win16, что позволяет ей компилироваться и работать на обеих 32-разрядных и 64-разрядных системах Windows.
  • Функция GetVersionEx доступна только на платформах Win32, поэтому программа использует директиву #IFDEF WIN32 для условного включения этого кода.
  • Программа предполагает, что контрол Memo1 имеет имя Memo1.
  • Это программное обеспечение не обрабатывает ошибки или исключения. В реальном приложении вам нужно добавить механизмы обработки ошибок и исключений для обеспечения надежности.

Альтернативное решение Если вы хотите написать кросс-платформенное решение, работающее на обоих Windows и не-Windows платформах, вы можете использовать структуру TOSVersionInfo из библиотеки VCL Delphi. Эта структура предоставляет способ получения информации о версии для различных операционных систем, включая Windows, macOS и Linux.

В примере ниже показано, как можно модифицировать программу для использования этой структуры:

uses
  SysUtils;

procedure GetWindowsVersion(var Major: integer; var Minor: integer);
begin
  with TOSVersionInfo.Create do begin
    OSVersionInfoSize := SizeOf(TOsVersionInfo);
    try
      VersionInfo;
    except
       // обработка ошибки
    end;
    Major := dwMajorVersion;
    Minor := dwMinorVersion;
  end;
end;

В этом примере процедура GetWindowsVersion использует объект TOSVersionInfo для получения информации о версии. Метод VersionInfo используется для извлечения номеров версии из структуры. Заметим, что это предположение, что программа работает на платформе, поддерживающей структуру TOSVersionInfo, которая включает в себя Windows, macOS и Linux.

Статья описывает способ узнать версию операционной системы Windows, используя функцию GetVersionEx и другие методы в различных версиях операционной системы.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-26 02:05:17/0.019406080245972/0