1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| unit WinVersion;
*
interface
// {$IFDEF MSWindows}{$WARN SYMBOL_PLATFORM OFF}{$WARN UNIT_PLATFORM OFF}{$ENDIF MSWindows}
*
*
uses
Windows,
Messages,
Consts,
SysUtils,
Classes;
*
type
TWindowsVersion = (wvUnknown, wvWin31, wvWin95, wvWin95OSR2, wvWin98,
wvWin98SE, wvWinME, wvWin9x, wvWinNT3, wvWinNT4, wvWin2000, wvWinXP,
wvWinNT, wvWinServer2003, wvWinVista);
*
const
CWindowsVersionStr: array [TWindowsVersion] of string = ('Inconnu',
'Windows 3.1', 'Windows 95', 'Windows 95 OSR 2', 'Windows 98',
'Windows 98 SE', 'Windows Me', 'Windows 9x', 'Windows NT 3.5',
'Windows NT 4', 'Windows 2000', 'Windows XP', 'Windows NT', 'Windows Server 2003',
'Windows Vista');
*
*
function GetWindowsVersion: TWindowsVersion;
*
implementation
*
function GetWindowsVersion: TWindowsVersion;
*
function ExportsAPI(module: HMODULE; const apiName: string): boolean;
begin
Result := GetProcAddress(module, PChar(apiName)) <> nil;
end; { ExportsAPI }
*
var
hKernel32: HMODULE; // Windows.pas
*
begin { GetWindowsVersion }
hKernel32 := GetModuleHandle('kernel32');
Win32Check(hKernel32 <> 0);
if ExportsAPI(hKernel32, 'GetLocaleInfoEx') then
Result := wvWinVista
else if ExportsAPI(hKernel32, 'GetLargePageMinimum') then
Result := wvWinServer2003
else if ExportsAPI(hKernel32, 'GetNativeSystemInfo') then
Result := wvWinXP
else if ExportsAPI(hKernel32, 'ReplaceFile') then
Result := wvWin2000
else if ExportsAPI(hKernel32, 'OpenThread') then
Result := wvWinME
else if ExportsAPI(hKernel32, 'GetThreadPriorityBoost') then
Result := wvWinNT4
else if ExportsAPI(hKernel32, 'IsDebuggerPresent') then // aussi dans NT4!
Result := wvWin98
else if ExportsAPI(hKernel32, 'GetDiskFreeSpaceEx') then // aussi dans NT4!
Result := wvWin95OSR2
else if ExportsAPI(hKernel32, 'ConnectNamedPipe') then
Result := wvWinNT3
else if ExportsAPI(hKernel32, 'Beep') then
Result := wvWin95
else // aucune idée
Result := wvUnknown;
end;
end. { GetWindowsVersion }
program unit1;
*
{$APPTYPE CONSOLE}
*
uses
Windows,
SysUtils,
WinVersion;
*
begin
Writeln('GetWindowsVersion: ', CWindowsVersionStr[GetWindowsVersion]);
Readln;
end. |
Partager