Как узнать версию Windows

Этот пример должен работать на всех версиях Windows.

{$IFDEF WIN32} 
function GetVersionEx(lpOs : pointer) : BOOL; stdcall; 
external 'kernel32' name 'GetVersionExA'; 
{$ENDIF} 
 
procedure GetWindowsVersion(var Major : integer; 
                            var Minor : integer); 
var 
{$IFDEF WIN32} 
  lpOS, lpOS2 : POsVersionInfo; 
{$ELSE} 
  l : longint; 
{$ENDIF} 
begin 
{$IFDEF WIN32} 
   GetMem(lpOS, SizeOf(TOsVersionInfo)); 
   lpOs^.dwOSVersionInfoSize := SizeOf(TOsVersionInfo); 
   while getVersionEx(lpOS) = false do begin 
     GetMem(lpos2, lpos^.dwOSVersionInfoSize + 1); 
     lpOs2^.dwOSVersionInfoSize := lpOs^.dwOSVersionInfoSize + 1; 
     FreeMem(lpOs, lpOs^.dwOSVersionInfoSize); 
     lpOS := lpOs2; 
   end; 
   Major := lpOs^.dwMajorVersion; 
   Minor := lpOs^.dwMinorVersion; 
   FreeMem(lpOs, lpOs^.dwOSVersionInfoSize); 
{$ELSE} 
  l := GetVersion; 
  Major := LoByte(LoWord(l)); 
  Minor := HiByte(LoWord(l)); 
{$ENDIF} 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
  Major : integer; 
  Minor : integer; 
begin 
  GetWindowsVersion(Major, Minor); 
  Memo1.Lines.Add(IntToStr(Major)); 
  Memo1.Lines.Add(IntToStr(Minor)); 
end;