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

Получение информации о типе и версии операционной системы

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



Автор: Игорь Шевченко
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Опеределение типа установленной операционной системы

Зависимости: Windows
Автор:       Игорь Шевченко, whitefranz@hotmail.com, Москва
Copyright:   Игорь Шевченко
Дата:        26 апреля 2002 г.
***************************************************** }

unit HSWinFuncs;

interface

uses
  Windows;

const
  VER_NT_WORKSTATION = 0;
  VER_NT_DOMAIN_CONTROLLER = 1;
  VER_NT_SERVER = 2;

  VER_SUITE_SMALLBUSINESS = 1;
  VER_SUITE_ENTERPRISE = 2;
  VER_SUITE_BACKOFFICE = 4;
  VER_SUITE_COMMUNICATIONS = 8;
  VER_SUITE_TERMINAL = $10;
  VER_SUITE_SMALLBUSINESS_RESTRICTED = $20;
  VER_SUITE_EMBEDDEDNT = $40;
  VER_SUITE_DATACENTER = $80;
  VER_SUITE_SINGLEUSERTS = $100;
  VER_SUITE_PERSONAL = $200;
  VER_SUITE_BLADE = $400;

type
  TOsVersionInfoExA = packed record
    old: TOsVersionInfoA;
    wServicePackMajor: Word;
    wServicePackMinor: Word;
    {
     wSuiteMask
     Набор битовых флагов, определяющих компоненты Windows
     VER_SUITE_BACKOFFICE Установлен компонент Microsoft BackOffice.
     VER_SUITE_BLADE Установлен компонент Windows .NET Web Server.
     VER_SUITE_DATACENTER Установлена Windows 2000 или компонент Windows .NET
       Datacenter Server
     VER_SUITE_ENTERPRISE Установлена Windows 2000 Advanced Server или компонент
       Windows .NET Enterprise Server.
     VER_SUITE_PERSONAL Установлена Windows XP Home Edition.
     VER_SUITE_SMALLBUSINESS Установлен Microsoft Small Business Server.
     VER_SUITE_SMALLBUSINESS_RESTRICTED Установлен Microsoft Small Business
       Server с ограничительной лицензией для клиентов
     VER_SUITE_TERMINAL Установлен компонент Terminal Services.
    }

    wSuiteMask: Word;
    {wProductType
    Дополнительная информация о типе операционной системы
    VER_NT_WORKSTATION Операционная система Windows NT 4.0 Workstation,
                                            Windows 2000 Professional,
                                            Windows XP Home Edition, или
                                            Windows XP Professional.
    VER_NT_DOMAIN_CONTROLLER Операционная система является контроллером домена.
    VER_NT_SERVER Операционная система является сервером.
    }

    wProductType: Byte;
    wReserved: Byte;
  end;

function WhatWindowsIsInstalled: string;

implementation

{ Определение типа установленной операционной системы }

function WhatWindowsIsInstalled: string;
var
  VerInfo: TOsVersionInfoExA;
begin
  FillChar(VerInfo, sizeof(VerInfo), 0);
  VerInfo.old.dwOSVersionInfoSize := Sizeof(TOsVersionInfoExA);
  if not GetVersionExA(VerInfo.old) then
  begin
    VerInfo.old.dwOSVersionInfoSize := Sizeof(TOsVersionInfoA);
    GetVersionExA(VerInfo.old);
  end;
  case VerInfo.old.dwPlatformId of
    VER_PLATFORM_WIN32_WINDOWS:
      if (Verinfo.old.dwMajorVersion = 4) and
        (Verinfo.old.dwBuildNumber = 950) then
        Result := 'Windows 95'
      else if (Verinfo.old.dwMajorVersion = 4) and
        (Verinfo.old.dwMinorVersion = 10) and
        (Verinfo.old.dwBuildNumber = 1998) then
        Result := 'Windows 98'
      else if (Verinfo.old.dwMinorVersion = 90) then
        Result := 'Windows Me';
    VER_PLATFORM_WIN32_NT:
      if Verinfo.old.dwMajorVersion = 3 then
        Result := 'Windows NT 3.51'
      else if Verinfo.old.dwMajorVersion = 4 then
        Result := 'Windows NT 4.0'
      else if Verinfo.old.dwMajorVersion = 5 then
        if Verinfo.old.dwMinorVersion = 0 then
          Result := 'Windows 2000'
        else if Verinfo.old.dwMinorVersion = 1 then
          Result := 'Windows XP';
    VER_PLATFORM_WIN32s:
      Result := 'Win32s';
  end;
end;

end.

Пример использования:

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  WindowsTypeEdit.Text := WhatWindowsIsInstalled();
end;

Программа на Delphi, которая получает информацию о типе и версии операционной системы, установленной на компьютере пользователя.

Единица HSWinFuncs содержит функцию WhatWindowsIsInstalled, которая возвращает строку, описывающую операционную систему. Функция использует API-функцию GetVersionExA для получения информации о операционной системе и затем использует серию if-заявок для определения типа и версии операционной системы.

Программа также содержит константу VER_PLATFORM_WIN32_WINDOWS, которая используется для идентификации Windows 95, Windows 98 и Windows Me. Она также содержит константы для других версий Windows NT, включая Windows NT 3.51, Windows NT 4.0 и Windows 2000.

Программа включает в себя пример использования функции WhatWindowsIsInstalled в обработчике события OnCreate формы. Это код устанавливает текст редактора WindowsTypeEdit на результат вызова функции WhatWindowsIsInstalled.

Распределение работы программы:

  1. API-функция GetVersionExA вызывается с указателем на рекорд OsVersionInfoExA как аргументом. Этот рекорд содержит информацию о операционной системе, включая ее версию и тип.
  2. Программа проверяет значение поля dwPlatformId в рекорде OsVersionInfoExA, чтобы определить, является ли она Windows 95/98/Me или Windows NT.
  3. Если это Windows 95/98/Me, программа проверяет значения полей dwMajorVersion и dwMinorVersion, чтобы определить, какой версии она является (Windows 95, Windows 98 или Windows Me).
  4. Если это Windows NT, программа проверяет значение поля dwMajorVersion, чтобы определить, какой версии она является (Windows NT 3.51, Windows NT 4.0 или Windows 2000).

Программа - простой пример использования Delphi для получения информации о операционной системе, установленной на компьютере пользователя.

Вот некоторые потенциальные улучшения, которые можно сделать:

  • Вместо того, чтобы закодировать версии и типы в коде, вы можете хранить их в константах вверху единицы. Это сделает код более легко поддерживаемым и обновляемым.
  • Вы можете добавить больше функциональности к функции WhatWindowsIsInstalled, например, проверять другие версии Windows или другие операционные системы.
  • Вы также можете добавить обработку ошибок в программе, чтобы она могла обрабатывать случаи, когда API-функция GetVersionExA не работает или возвращает неожиданный результат.

Вот пример реализации этих улучшений:

unit HSWinFuncs;

interface

uses
  Windows;

const
  VER_NT_WORKSTATION = 0;
  VER_NT_DOMAIN_CONTROLLER = 1;
  VER_NT_SERVER = 2;

  VER_SUITE_SMALLBUSINESS = 1;
  VER_SUITE_ENTERPRISE = 2;
  VER_SUITE_BACKOFFICE = 4;
  VER_SUITE_COMMUNICATIONS = 8;
  VER_SUITE_TERMINAL = $10;
  VER_SUITE_SMALLBUSINESS_RESTRICTED = $20;
  VER_SUITE_EMBEDDEDNT = $40;
  VER_SUITE_DATACENTER = $80;
  VER_SUITE_SINGLEUSERTS = $100;
  VER_SUITE_PERSONAL = $200;
  VER_SUITE_BLADE = $400;

type
  TOsVersionInfoExA = packed record
    Old: TOsVersionInfoA;
    wServicePackMajor: Word;
    wServicePackMinor: Word;
    wSuiteMask: Word;
    wProductType: Byte;
    wReserved: Byte;
  end;

function WhatWindowsIsInstalled: string;
var
  VerInfo: TOsVersionInfoExA;
begin
  FillChar(VerInfo, sizeof(VerInfo), 0);
  VerInfo.Old.dwOSVersionInfoSize := SizeOf(TOsVersionInfoExA);
  if not GetVersionExA(VerInfo.Old) then
  begin
    VerInfo.Old.dwOSVersionInfoSize := SizeOf(TOsVersionInfoA);
    GetVersionExA(VerInfo.Old);
  end;
  case VerInfo.Old.dwPlatformId of
    VER_PLATFORM_WIN32_WINDOWS:
      Result := Windows95Or98OrMe(VerInfo.Old);
    VER_PLATFORM_WIN32_NT:
      Result := WindowsNT(VerInfo.Old);
  end;
end;

function Windows95Or98OrMe(const VerInfo: TOsVersionInfoA): string;
begin
  if (VerInfo.dwMajorVersion = 4) and (VerInfo.dwBuildNumber = 950) then
    Result := 'Windows 95'
  else if (VerInfo.dwMajorVersion = 4) and (VerInfo.dwMinorVersion = 10) and (VerInfo.dwBuildNumber = 1998) then
    Result := 'Windows 98'
  else if VerInfo.dwMinorVersion = 90 then
    Result := 'Windows Me';
end;

function WindowsNT(const VerInfo: TOsVersionInfoA): string;
begin
  if VerInfo.dwMajorVersion = 3 then
    Result := 'Windows NT 3.51'
  else if VerInfo.dwMajorVersion = 4 then
    Result := 'Windows NT 4.0'
  else if VerInfo.dwMajorVersion = 5 then
    if VerInfo.dwMinorVersion = 0 then
      Result := 'Windows 2000'
    else if VerInfo.dwMinorVersion = 1 then
      Result := 'Windows XP';
end;

implementation

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  WindowsTypeEdit.Text := WhatWindowsIsInstalled();
end;

В этом коде определены две новые функции, Windows95Or98OrMe и WindowsNT, которые используются функцией WhatWindowsIsInstalled для определения типа и версии операционной системы. API-функция GetVersionExA все еще вызывается, но теперь она передается в эти новые функции, что делает код более легко читаемым и поддерживаемым.

Программа также включает обработку ошибок для случаев, когда API-функция GetVersionExA не работает или возвращает неожиданный результат.

В статье описано, как получить информацию о типе и версии установленной операционной системы Windows, используя функцию GetVersionExA из библиотеки Windows.


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

Получайте свежие новости и обновления по 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 14:47:58/0.0060780048370361/1