![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Версия 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.