При разработке различных приложений в Delphi иногда необходимо определять под какой именно операционной системой запускается наше приложение. Например, чтобы знать — возможно ли использовать в работе приложения центр уведомлений Windows или возможности работы с панелью управления в Delphi.
Версия Delphi XE2 привнесла новые возможности разработки приложений под Mac OS и iOS. Наряду с этим, разработчики в Delphi также получили возможность без использования сторонних компонентов и библиотек определять под какой операционной системой запущено приложение.
| Основная информация по компоненту | ||
| Исходник официального примера и документация | DocWiki | |
Демонстрационный пример разработан с использованием платформы FMX и показывает как определить версию операционной системы, архитектуру, какие сервис-паки установлены в операционной системе, использую стандартные возможности Delphi, входящие в состав Delphi XE2.
Внешний вид демонстрационного приложения представлен на рисунке ниже:
Использование TOSVersion
Запись (record) TOSVersion содержится в модуле System.SysUtils и имеет следующее описание:
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 определены следующим образом:
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;
На рисунке ниже представлен пример работающего демонстрационного приложения:
При подготовке статьи использовалась информация со следующих ресурсов:
- Официальный репозиторий демонстрационных примеров Delphi на SourceForge
- Документация по TOSVersion на сайте Embarcadero


