Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Версия Windows [D6, XP]


psa247 ©   (2005-10-11 19:17:00) 

Как узнать о наличии SP1, SP2 в Windows?


begin...end   (2005-10-12 16:15:00) [1]

> psa247 ©   (12.10.05 13:36) [6]

Структура OSVERSIONINFOEX описана правильно. Но заново объявлять функцию GetVersionEx вовсе необязательно. И что за загадочное число 768?

Я бы сделал примерно так:

const
 VER_SUITE_PERSONAL = $00000200;
var
 WinVersion: TOSVersionInfoEx;
begin
 WinVersion.dwOSVersionInfoSize := sizeof(WinVersion);
 if GetVersionEx(POSVersionInfo(@WinVersion)^) then
   with WinVersion do
   begin
     if (dwMajorVersion = 5) and (dwMinorVersion = 1) and ((wSuiteMask and VER_SUITE_PERSONAL) <> 0) then
     // Установлена XP Home Edition
   end
end


psa247   (2005-10-12 13:36:00) [2]

begin...end ©
Так верно будет?

type
 OSVERSIONINFOEX = packed record
   dwOSVersionInfoSize: DWORD;
   dwMajorVersion: DWORD;
   dwMinorVersion: DWORD;
   dwBuildNumber: DWORD;
   dwPlatformId: DWORD;
   szCSDVersion: array[0..127] of Char;
   wServicePackMajor: WORD;
   wServicePackMinor: WORD;
   wSuiteMask: WORD;
   wProductType: BYTE;
   wReserved: BYTE;
 end;
 TOSVersionInfoEx = OSVERSIONINFOEX;

function GetVersionExA(var VersionInformation : OSVERSIONINFOEX): Bool; stdcall; external 'kernel32.dll' name 'GetVersionExA';

...
var WinVersion : TOSVERSIONINFOEX;

  WinVersion.dwOSVersionInfoSize:= SizeOf(WinVersion);
  GetVersionExA(WinVersion);
  if(WinVersion.DwMajorVersion =5)and(WinVersion.dwMinorVersion =1)then Result:= True
else exit;
  if WinVersion.wSuiteMask = 768 then tmp:= ' Home Edition'
else tmp:= ' Professional';

...


psa247   (2005-10-12 11:17:00) [3]

Выдает ошибку на OSVersionInfoEx - не существует. В Windows.pas только OSVersionInfoА, OSVersionInfoW


begin...end   (2005-10-11 21:07:00) [4]

> psa247 ©   (11.10.05 20:39) [3]

А ведь я в [1] прямо написал: "Если этой информации будет недостаточно, можно использовать OSVERSIONINFOEX".

Наверное, не просто так написал ведь? Значит, можно было вначале зайти в MSDN ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/osversioninfoex_str.asp) -- посмотреть на поле wSuiteMask, и... вопрос сразу бы решился.


psa247   (2005-10-11 20:39:00) [5]

А Home | Professional ?


psa247   (2005-10-11 20:20:00) [6]

Благодарю


begin...end   (2005-10-11 19:25:00) [7]

Посмотрите в справке по API описание функции GetVersionEx. Она заполняет структуру OSVERSIONINFO, а в ней есть поле szCSDVersion -- оно и содержит информацию о сервис-паке. Если этой информации будет недостаточно, можно использовать OSVERSIONINFOEX.


Наверх

Титульная страница Поиск, карта сайта Написать письмо