unit GetWindowsName;
interface
uses Registry,Windows,ShellAPI;
{--------------------------------------------------------------------------}
{1、获取当前Windows的版本}
const
cOsUnknown = -1;
cOsWin95 = 0;
cOsWin98 = 1;
cOsWin98SE = 2;
cOsWinME = 3;
cOsWinNT = 4;
cOsWin2000 = 5;
cOsXP = 6;
function GetWindowsVersion: string;
function GetOperatingSystem: Integer;
function IsXP: Boolean;
function IsWin2000: Boolean;
function IsWin95: Boolean;
function IsWinME: Boolean;
function IsWinNT2: Boolean;
implementation
function GetOperatingSystem: Integer;
var
osVerInfo: TOSVersionInfo;
majorVer, minorVer: Integer;
begin
Result := cOsUnknown;
{ set operating system type flag }
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(osVerInfo) then
begin
majorVer := osVerInfo.dwMajorVersion;
minorVer := osVerInfo.dwMinorVersion;
case osVerInfo.dwPlatformId of
VER_PLATFORM_WIN32_NT: { Windows NT/2000 }
begin
if majorVer <= 4 then
Result := cOsWinNT
else if (majorVer = 5) and (minorVer = 0) then
Result := cOsWin2000
else if (majorVer = 5) and (minorVer = 1) then
Result := cOsXP
else
Result := cOsUnknown;
end;
VER_PLATFORM_WIN32_WINDOWS: { Windows 9x/ME }
begin
if (majorVer = 4) and (minorVer = 0) then
Result := cOsWin95
else if (majorVer = 4) and (minorVer = 10) then
begin
if osVerInfo.szCSDVersion[1] = 'A' then
Result := cOsWin98SE
else
Result := cOsWin98;
end
else if (majorVer = 4) and (minorVer = 90) then
Result := cOsWinME
else
Result := cOsUnknown;
end;
else
Result := cOsUnknown;
end;
end
else
Result := cOsUnknown;
end;
{--------------------------------------------------------------------------}
{2、判断当前OS是否属于那一个}
function IsXP: Boolean;
var
OS: TOSVERSIONINFO;
begin
OS.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO);
GetVersionEx(os);
Result := (OS.dwPlatformId = VER_PLATFORM_WIN32_NT) and
(OS.dwMajorVersion = 5) and (OS.dwMinorVersion = 1);
end;
function IsWin2000: Boolean;
var
OS: TOSVersionInfo;
begin
ZeroMemory(@OS, SizeOf(OS));
OS.dwOSVersionInfoSize := SizeOf(OS);
GetVersionEx(OS);
Result := (OS.dwMajorVersion >= 5) and
(OS.dwPlatformId = VER_PLATFORM_WIN32_NT);
end;
function IsWinNT2: Boolean;
var
OS: TOSVersionInfo;
begin
ZeroMemory(@OS, SizeOf(OS));
OS.dwOSVersionInfoSize := SizeOf(OS);
GetVersionEx(OS);
Result := OS.dwPlatformId = VER_PLATFORM_WIN32_NT;
end;
{ or: }
{function IsWinNT2: Boolean;
begin
Result := Win32Platform = VER_PLATFORM_WIN32_NT;
end; }
function IsWinME: Boolean;
var
OS: TOSVersionInfo;
begin
ZeroMemory(@OS, SizeOf(OS));
OS.dwOSVersionInfoSize := SizeOf(OS);
GetVersionEx(OS);
Result := (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 90) and
(OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
end;
function IsWin95: Boolean;
var
OS: TOSVersionInfo;
begin
ZeroMemory(@OS, SizeOf(OS));
OS.dwOSVersionInfoSize := SizeOf(OS);
GetVersionEx(OS);
Result := (OS.dwMajorVersion >= 4) and (OS.dwMinorVersion = 0) and
(OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
end;
function GetWindowsVersion: string;
var
VerInfo: TOsversionInfo;
PlatformId, VersionNumber: string;
Reg: TRegistry;
begin
VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo);
GetVersionEx(VerInfo);
// Detect platform
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
case VerInfo.dwPlatformId of
VER_PLATFORM_WIN32s:
begin
// Registry (Huh? What registry?)
PlatformId := 'Windows 3.1';
end;
VER_PLATFORM_WIN32_WINDOWS:
begin
// Registry
Reg.OpenKey('/SOFTWARE/Microsoft/Windows/CurrentVersion', False);
PlatformId := Reg.ReadString('ProductName');
VersionNumber := Reg.ReadString('VersionNumber');
end;
VER_PLATFORM_WIN32_NT:
begin
// Registry
Reg.OpenKey('/SOFTWARE/Microsoft/Windows NT/CurrentVersion', False);
PlatformId := Reg.ReadString('ProductName');
VersionNumber := Reg.ReadString('CurrentVersion');
end;
end;
Reg.Free;
Result := PlatformId + ' (version ' + VersionNumber + ')';
end;
end.