2004. január 27., kedd

Windows detection routines


Problem/Question/Abstract:

Here is how to find out almost everything of windows versions.

Answer:

function IsWin31: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  Result := (Os.dwPlatformId = VER_PLATFORM_WIN32s);
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 IsWin95OSR2: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  result := (OS.dwMajorVersion >= 4) and (OS.dwMinorVersion = 0) and
    (lo(OS.dwBuildNumber) > 1000) and (OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
end;

function IsWinNT: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  result := OS.dwPlatformId = VER_PLATFORM_WIN32_NT;
end;

function IsWin98: 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 IsWin98se: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  result := (OS.dwMajorVersion >= 4) and (OS.dwMinorVersion > 0) and
    (lo(OS.dwBuildNumber) > 2000) and (OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
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 IsWinXP: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  result := (OS.dwMajorVersion >= 5) and (OS.dwMinorVersion >= 1) and (OS.dwPlatformId
    = 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 GetNTType: string;
var
  r: TRegistry;
  ts: string;
begin

  Result := '[UNKNOWN]';

  if IsWinNT then
  begin
    r := TRegistry.Create;
    r.RootKey := HKEY_LOCAL_MACHINE;
    r.OpenKey('SYSTEM\CurrentControlSet\Control\ProductOptions', False);
    ts := AnsiUpperCase(R.ReadString('ProductType'));
    r.Free;
    if (ts = 'WINNT') then
    begin
      result := 'Workstation';
      if IsWin2000 then
        result := 'Professional';
    end
    else if (ts = 'SERVERNT') then
    begin
      result := 'Server';
    end
    else if (ts = 'LANMANNT') then
    begin
      result := 'Advanced Server';
    end;
  end;

end;

Nincsenek megjegyzések:

Megjegyzés küldése