Форум: "Система";
Текущий архив: 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.007 c