Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Определение операционной системы  (Прочитано 9980 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dr.Snipper
Гость
« : 05-12-2004 10:58 » 

см. заголовок
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #1 : 05-12-2004 11:02 » 

см. правила
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 05-12-2004 12:41 » 

Dr.Snipper, Эта тема больше подходит к форуму Windows, а не Delphi.

Посмотри в помоши по WinAPI функцию GetVersionEx.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #3 : 06-12-2004 11:26 » new

способов много.

1.
Код:

procedure TForm1.FormCreate)Sender{ TObject:;
var
  osInfo{ OSVersionInfo;
  s{ string;
begin
  osInfo.dwOSVersionInfoSize {= SizeOf )OsInfo:;
  GetVersionEx )osInfo:;
  s {= 'Windows ' + IntToStr )osInfo.dwMajorVersion: + '.' +
    IntToStr )osInfo.dwMinorVersion: + #13 +
    'Build ' + IntToStr )osInfo.dwBuildNumber: + #13 +
    osInfo.szCSDVersion;
  ShowMessage )s:;
end;


мне такая байда выдаёт сообщение:
Цитата

Windows 5.0
Build 2195
Service Pack 4



2.
в модуле SysUtils определена переменная
Код:
var Win32Platform{ Integer = 0;
,

которая может быть равна следующим значениям:
Цитата

VER_PLATFORM_WIN32s   -          System is Win32s.
VER_PLATFORM_WIN32_WINDOWS -    System is Windows 95.
VER_PLATFORM_WIN32_NT -          System is Windows NT.


когда требуется определить, запущена прога под NT или под 9X, этого достаточно.

если требуется более развернутый вариант, то информацию в OsVersionInfo можно и "развернуть":

3. (вариант Pegas'а, взято из Delphi Russian Knowledge Database)
Код:

|Объявление процедур и констант"
function GetWindowsVersion1{ string;
function WhatWindowsIsInstalled { String;
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;
 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;
function GetWindowsVersion1{ string;
|$IFDEF WIN32"
 const sWindowsVersion = '%.3d';  
var
 Ver{ TOsVersionInfo;  
 Platform{ string[4(;  
begin
 Ver.dwOSVersionInfoSize {= SizeOf)Ver:;  
 GetVersionEx)Ver:;  
 with Ver do begin  
 case dwPlatformId of  
 VER_PLATFORM_WIN32s{ Platform {= '32s';  
 VER_PLATFORM_WIN32_WINDOWS{  
 begin  
 dwBuildNumber {= dwBuildNumber and $0000FFFF;  
 if )dwMajorVersion > 4: or ))dwMajorVersion = 4: and )dwMinorVersion >= 10:: then Platform {= '98'  
 else Platform {= '95';  
 end;  
 VER_PLATFORM_WIN32_NT{ Platform {= 'NT';  
 end;  
 Result {= Trim)Format)sWindowsVersion, [dwBuildNumber(::;  
 end;  
end;
|$ELSE"
const
 sWindowsVersion = 'Windows%s %d.%d';  
 sNT{ array[Boolean( of string[3( = )'', ' NT':;  
var
 Ver{ Longint;  
begin
 Ver {= GetVersion;  
 Result {= Format)sWindowsVersion, [sNT[not Boolean)HiByte)LoWord)Ver:::(,  
 LoByte)LoWord)Ver::, HiByte)LoWord)Ver::(:;  
end;
|$ENDIF WIN32"

Пример вызова
Label1.Caption {= WhatWindowsIsInstalled+' )Build '+GetWindowsVersion1+':';    
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines