Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
14-53709
Master_sx
2004-01-23 17:43
2004.02.17
Вопрос по Delphi


4-53815
Avenger_NhT
2003-12-09 15:18
2004.02.17
включение TV-OUT


1-53631
Василий Петрович
2004-02-06 20:15
2004.02.17
Запись в INI-файл


11-53442
Кладов
2003-05-31 17:27
2004.02.17
Готова ретроспектива базовых версий


14-53752
dachnick[bio cross]
2004-01-28 00:32
2004.02.17
Срочно нужен программист!!! Пишите!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский