Главная страница | назад





Article #17482: Getting the Windows version in code?

 Question and Answer Database

FAQ2482D.txt   Getting the Windows version in code?
Category   :Windows API
Platform    :All
Product    :All 32 bit  

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;

7/16/98 4:31:28 PM
 

Last Modified: 01-SEP-99