Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.17;
Скачать: CL | DM;

Вниз

Возможно ли получить более подробную информацию ?   Найти похожие ветки 

 
beglec   (2003-11-30 23:01) [0]

У меня есть вот такая процедурка. вполне устривала.

function OSWindows(var NameOs: string): Word;
{VER_PLATFORM_WIN32s=0; VER_PLATFORM_WIN32_WINDOWS=1; VER_PLATFORM_WIN32_NT=2;
Даннаые константы определы в модуле Windows}
var OSVerInfo: TOSVersionInfo;
begin
OSVerInfo.dwOSVersionInfoSize:=SizeOf(OSVerInfo); {Узнать инфу о версии}
GetVersionEx(OSVerInfo);
case OSVerInfo.dwPlatformId of {Вернуть строку определяющию систему по ID системы}
0: NameOs:="Window 32"; {Windows 3.1, 3.11 и дак далее}
1: NameOs:="Window 95/98/ME"; {Движок 95}
2: NameOs:="Window NT/2000/XP"; {Движок NT}
else NameOs:="Uniknow OS"; {Если система не определилась то вернуть }
end; {case}
Result:=OSVerInfo.dwPlatformId; {Вернуть ID операционной системы}
end;

Но тут встала проблемка. Мне нужно более лучше отличать систему
например 2000 или XP
Подскажите как более детально узнать о платформе?


 
Michael K   (2003-11-30 23:55) [1]

Очень криво, но может немного помочь:

function GetWindowsName:string;
var reg:TRegistry;
begin
result:="Error";
reg:=TRegistry.Create(KEY_READ);
reg.RootKey:=HKEY_LOCAL_MACHINE;
if (reg.OpenKey("SOFTWARE\Microsoft\Windows\CurrentVersion", false))and(reg.ValueExists("ProductName")) then
try
result:=reg.ReadString("ProductName");
except
end
else
begin
reg.CloseKey;
if reg.OpenKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion", false) then
try
result:=reg.ReadString("ProductName");
except
end;
end;
reg.CloseKey;
reg.Free;
end;


 
Ihor Osov'yak ©   (2003-12-01 00:12) [2]

немного ровнее ;-)

unit e0_winVersion;

{$IFDEF VER150}
{$WARN UNSAFE_TYPE OFF}
{$WARN UNSAFE_CODE OFF}
{$WARN SYMBOL_PLATFORM OFF}
{$ENDIF}

interface

uses windows;

type
TWindowsVersion = (wvUnknown, wvWin95, wvWin95OSR2, wvWin98, wvWin98SE,
wvWinME, wvWinNT31, wvWinNT35, wvWinNT351, wvWinNT4, wvWin2000, wvWinXP, wvWin2k3);
TWindowsKind = (wkUnknown, wkWin9X, wkWinME, wkWinNT);

function GetWindowsVersion: TWindowsVersion;
function GetWindowsKind: TWindowsKind;

implementation

uses
sysUtils;

var
KernelVersionHi: DWORD;
IsWinNT: boolean;
Kernel32FileName: string;

function GetModulePath(const Module: HMODULE): string;
var
L: Integer;
begin
L := MAX_PATH + 1;
SetLength(Result, L);
L := Windows.GetModuleFileName(Module, Pointer(Result), L);
SetLength(Result, L);
end;

function VersionFixedFileInfo(const FileName: string; var FixedInfo: TVSFixedFileInfo): Boolean;
var
Size, FixInfoLen: DWORD;
Handle: THandle;
Buffer: string;
FixInfoBuf: PVSFixedFileInfo;
begin
Result := False;
Size := GetFileVersionInfoSize(PChar(FileName), Handle);
if Size > 0 then
begin
SetLength(Buffer, Size);
if GetFileVersionInfo(PChar(FileName), Handle, Size, Pointer(Buffer)) and
VerQueryValue(Pointer(Buffer), "\", Pointer(FixInfoBuf), FixInfoLen) and
(FixInfoLen = SizeOf(TVSFixedFileInfo)) then
begin
Result := True;
FixedInfo := FixInfoBuf^;
end;
end;
end;

procedure Init__SysInfo;
var
VerFixedFileInfo: TVSFixedFileInfo;
begin
IsWinNT := Win32Platform = VER_PLATFORM_WIN32_NT;

Kernel32FileName := GetModulePath(GetModuleHandle(kernel32));
if (not IsWinNT) and VersionFixedFileInfo(Kernel32FileName, VerFixedFileInfo) then
KernelVersionHi := VerFixedFileInfo.dwProductVersionMS
else
KernelVersionHi := 0;
end;

function GetWindowsVersion: TWindowsVersion;
begin
//ShowMessage("Win32Platform "+ IntToStr(Win32Platform));
//ShowMessage("Win32MajorVersion "+ IntToStr(Win32MajorVersion));
//ShowMessage("Win32MinorVersion "+ IntToStr(Win32MinorVersion));
Result := wvUnknown;
case Win32Platform of
VER_PLATFORM_WIN32_WINDOWS:
case Win32MinorVersion of
0..9:
if Trim(Win32CSDVersion) = "B" then
Result := wvWin95OSR2
else
Result := wvWin95;
10..89:
// On Windows ME Win32MinorVersion can be 10 (indicating Windows 98
// under certain circumstances (image name is setup.exe). Checking
// the kernel version is one way of working around that.
if KernelVersionHi = $0004005A then // 4.90.x.x
Result := wvWinME
else if Trim(Win32CSDVersion) = "A" then
Result := wvWin98SE
else
Result := wvWin98;
90:
Result := wvWinME;
end;
VER_PLATFORM_WIN32_NT:
case Win32MajorVersion of
3:
case Win32MinorVersion of
1:
Result := wvWinNT31;
5:
Result := wvWinNT35;
51:
Result := wvWinNT351;
end;
4:
Result := wvWinNT4;
5:
case Win32MinorVersion of
0:
Result := wvWin2000;
1:
Result := wvWinXP;
2:
Result := wvWin2k3;
end;
end;
end;
end;

function GetWindowsKind: TWindowsKind;
begin
case GetWindowsVersion of
wvWin95, wvWin95OSR2, wvWin98, wvWin98SE: result := wkWin9X;
wvWinME: result := wkWinME;
// wvWinNT31, wvWinNT35: wvWinNT351,
wvWinNT4, wvWin2000, wvWinXP, wvWin2k3: result := wkWinNT;
else
result := wkUnknown;
end;
end;

initialization
Init__SysInfo;
finalization

end.


 
Юрий Зотов ©   (2003-12-01 01:01) [3]

Бог мой, зачем такие страшные навороты?

В модуле SysUtils есть уже готовые переменные Win32Platform, Win32MajorVersion, Win32MinorVersion, Win32BuildNumber и Win32CSDVersion. Инициализируются они автоматически, их надо только проверить. Расшифровка указана в MSDN, в описании OSVERSIONINFO.

dwMajorVersion
Windows 95 4
Windows 98 4
Windows Me 4
Windows NT 3.51 3
Windows NT 4.0 4
Windows 2000 5
Whistler 5

dwMinorVersion
Windows 95 0
Windows 98 10
Windows Me 90
Windows NT 3.51 51
Windows NT 4.0 0
Windows 2000 0
Whistler 1

dwBuildNumber
Windows NT/2000: Identifies the build number of the operating system.

Windows 95/98: Identifies the build number of the operating system in the low-order word. The high-order word contains the major and minor version numbers.

dwPlatformId
Identifies the operating system platform. This member can be one of the following values.
VER_PLATFORM_WIN32s Win32s on Windows 3.1.
VER_PLATFORM_WIN32_WINDOWS Windows 95, Windows 98, or Windows Me.
VER_PLATFORM_WIN32_NT Windows NT 3.51, Windows NT 4.0, Windows 2000, or Whistler.

szCSDVersion
Windows NT/2000, Whistler: Contains a null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack installed on the system. If no Service Pack has been installed, the string is empty.
Windows 95/98/Me: Contains a null-terminated string that indicates additional version information. For example, " C" indicates Windows 95 OSR2 and " A" indicates Windows 98 SE.


 
Ihor Osov'yak ©   (2003-12-01 03:06) [4]

Ну, немного покраснел..
Навороты? Пожалуй только в отношении VersionFixedFileInfo.. Наверное, из-за неумения многда смотреть и видеть (это я о szCSDVersion).. А в остальном - рассшифровка в то перечисление, которое было нужно для конкретной задачи..

Зы..
По отношению Win32CSDVersion вообще-то не очень стыдно, а вот о том, что в деталях не посмотрел, что там возвращает GetVersionEx, то таки да..



Страницы: 1 вся ветка

Текущий архив: 2004.02.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
1-53621
Budy
2004-02-07 10:41
2004.02.17
Cos, Sin, Tg, Ctg


1-53569
Builder
2004-02-09 00:28
2004.02.17
ListBox


14-53755
CS
2004-01-27 21:01
2004.02.17
Хостинг


14-53721
syte_ser78
2004-01-29 11:24
2004.02.17
FreePascal Текстовый режим


3-53383
denis24
2004-01-27 13:31
2004.02.17
Параметры в query