Hallo,
für Windows fragt man am besten die Version der Datei kernel32.dll ab
Wenns egal ist, dass der Code nur auf Windows 2000 aufwärts funktioniert, ist die Funktion "RTLGetVersion" das Mittel der Wahl, zumindest für mich. Gibt die richtige Version zurück, auch
ohne, dass das Programm ein Manifest haben müsste. Die Funktion ist selbst in Delphi 10.2.3 nicht in der Basisbibliothek enthalten, muss man also selbst einbauen.
Das geht so:
Delphi-Quellcode:
type
TRTLOSVersioninfoExW = record
dwOSVersionInfoSize: DWORD;
dwMajorVersion: DWORD;
dwMinorVersion: DWORD;
dwBuildNumber: DWORD;
dwPlatformId: DWORD;
szCSDVersion: array[0..127] of WIDECHAR;
wServicePackMajor: WORD;
wServicePackMinor: WORD;
wSuiteMask: WORD;
wProductType: BYTE;
wReserved: BYTE;
end;
function RTLGetVersion(out RtlOsVer: TRTLOSVersioninfoExW): boolean;
var
po : TFarProc;
hKernelLib: THandle;
GetRTLVEX : function(var vex: TRTLOSVersioninfoExW): DWORD; stdcall;
begin
result := false;
ZeroMemory(@RtlOsVer, sizeof(RtlOsVer));
RtlOsVer.dwOSVersionInfoSize := sizeof(TRTLOSVersioninfoExW);
hKernelLib := LoadLibrary('ntdll');
if hKernelLib > 0 then
try
po := GetProcAddress(hKernelLib, 'RtlGetVersion');
if po <> nil then begin
@GetRTLVEX := po;
GetRTLVEX(RtlOsVer);
result := true;
end;
finally
FreeLibrary(hKernelLib);
end
end;