Question:
How do I retrieve the Windows version in code?
Answer:
Here is an example that should work under all versions of 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;