уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

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

Версия Delphi XE2 привнесла новые возможности разработки приложений под Mac OS и iOS. Наряду с этим, разработчики в Delphi также получили возможность без использования сторонних компонентов и библиотек определять под какой операционной системой запущено приложение.

Основная информация по компоненту
Исходник официального примера и документация SourceForge DocWiki

Демонстрационный пример разработан с использованием платформы FMX и показывает как определить версию операционной системы, архитектуру, какие сервис-паки установлены в операционной системе, использую стандартные возможности Delphi, входящие в состав Delphi XE2.

Внешний вид демонстрационного приложения представлен на рисунке ниже:

 

Использование TOSVersion

Запись (record) TOSVersion содержится в модуле System.SysUtils и имеет следующее описание:

Несмотря на то, что TOSVersion появилась в Delphi XE2, код ниже описывает TOSVersion последней версии Delphi 10.3 Rio
type
  TOSVersion = record
  public type
    TArchitecture = (arIntelX86, arIntelX64, arARM32, arARM64);
    TPlatform = (pfWindows, pfMacOS, pfiOS, pfAndroid, pfWinRT, pfLinux);
  public const
    AllArchitectures = [arIntelX86, arIntelX64, arARM32, arARM64];
    AllPlatforms = [pfWindows, pfMacOS, pfiOS, pfAndroid, pfWinRT, pfLinux];
  private
    class var FArchitecture: TArchitecture;
    class var FBuild: Integer;
    class var FMajor: Integer;
    class var FMinor: Integer;
    class var FName: string;
    class var FPlatform: TPlatform;
    class var FServicePackMajor: Integer;
    class var FServicePackMinor: Integer;
{$IFDEF LINUX}
    class var FPrettyName: string;
    class var FLibCVersionMajor: Integer;
    class var FLibCVersionMinor: Integer;
{$ENDIF LINUX}
    class constructor Create;
  public
    class function Check(AMajor: Integer): Boolean; overload; static; inline;
    class function Check(AMajor, AMinor: Integer): Boolean; overload; static; inline;
    class function Check(AMajor, AMinor, AServicePackMajor: Integer): Boolean; overload; static; inline;
    class function ToString: string; static;
    class property Architecture: TArchitecture read FArchitecture;
    class property Build: Integer read FBuild;
    class property Major: Integer read FMajor;
    class property Minor: Integer read FMinor;
    class property Name: string read FName;
    class property Platform: TPlatform read FPlatform;
    class property ServicePackMajor: Integer read FServicePackMajor;
    class property ServicePackMinor: Integer read FServicePackMinor;
{$IFDEF LINUX}
    class property PrettyName: string read FPrettyName;
    class property LibCVersionMajor: Integer read FLibCVersionMajor;
    class property LibCVersionMinor: Integer read FLibCVersionMinor;
{$ENDIF LINUX}
  end;

TOSVersion имеет следующие свойства:

Свойство Тип Описание
Architecture
TArchitecture = (arIntelX86, 
                 arIntelX64, 
                 arARM32, 
                 arARM64)
Перечисляет архитектуры процессоров, на которых могут работать приложения Delphi
Build
Integer
Представляет текущий номер сборки операционной системы. Номер сборки обычно указывается как третье число в обозначении версии. Например, в следующей записи: 5.1.2600, номер сборки равен 2600.
Major
Integer
Представляет основной номер текущей операционной системы. Например, основной номер версии Windows 7 — 6.
Minor
Integer
Представляет дополнительный номер текущей операционной системы.Чтобы сравнить основные и вспомогательные номера текущей операционной системы с конкретными значениями, используйте функцию проверки (Check).
Name
String
Представляет имя текущей операционной системы.
Platform
TPlatform = (pfWindows, 
             pfMacOS, 
             pfiOS, 
             pfAndroid, 
             pfWinRT, 
             pfLinux)
Представляет текущую платформу (Windows, Mac OS, Android и т.д.).
ServicePackMajor
Integer
Представляет основной номер версии пакета обновления для текущей операционной системы.
ServicePackMinor

 

Integer
Представляет вспомогательный номер версии пакета обновления для текущей операционной системы.

Также при проверке версии операционной системы в Delphi вы можете использовать следующие метод TOSVersion:

class function Check(AMajor: Integer): Boolean; overload; static; inline;
class function Check(AMajor, AMinor: Integer): Boolean; overload; static; inline;
class function Check(AMajor, AMinor, AServicePackMajor: Integer): Boolean; overload; static; inline;

Метод определяет является ли версия текущей операционной системы выше или равной определенному значению.

Демонстрационный пример

В примере демонстрируется использование возможностей TOSVersion при определении характеристик операционной системы под которой запущено приложение Delphi.

Вывод информации об операционной системе Windows осуществляется следующим образом:

procedure TFormOSVersion.ButtonGetOSInfoClick(Sender: TObject);
begin
  with MemoLog.Lines do
  begin
    Clear;
    Add(TOSVersion.ToString);
    Add('');
    Add('Architecture: ' + OSArchitectureToStr(TOSVersion.Architecture));
    Add('Platform: ' + OSPlatformToStr(TOSVersion.Platform));
    Add('Build: ' + IntToStr(TOSVersion.Build));
    Add('Major: ' + IntToStr(TOSVersion.Major));
    Add('Minor: ' + IntToStr(TOSVersion.Minor));
    Add('Name: ' + TOSVersion.Name);
    Add('Service Pack - Major: ' + IntToStr(TOSVersion.ServicePackMajor));
    Add('Service Pack - Minor: ' + IntToStr(TOSVersion.ServicePackMinor));
  end;
end;

При этом, функции OSArchitectureToStr и OSPlatformToStr определены следующим образом:

Для Delphi 10.3 Rio эти функции необходимо дополнить, так как по сравнению с Delphi XE2, перечень определяемых операционных систем был значительно расширен.
function OSArchitectureToStr(const a: TOSVersion.TArchitecture): string;
begin
  case a of
    arIntelX86:
      Result := 'IntelX86';
    arIntelX64:
      Result := 'IntelX64';
    else
      Result := 'UNKNOWN OS architecture';
  end;
end;
 
function OSPlatformToStr(const p: TOSVersion.TPlatform): string;
begin
  case p of
    pfWindows:
      Result := 'Windows';
    pfMacOS:
      Result := 'MacOS';
    else
      Result := 'UNKNOWN OS Platform';
  end;
end;

На рисунке ниже представлен пример работающего демонстрационного приложения:

 

При подготовке статьи использовалась информация со следующих ресурсов:

  1. Официальный репозиторий демонстрационных примеров Delphi на SourceForge
  2. Документация по TOSVersion на сайте Embarcadero

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.