试试吧!! function Tform1.GetWindowsVersion : string; var WindowsInfo : TOSVersionInfo; begin WindowsInfo.dwOSVersionInfoSize := sizeof (OSVERSIONINFO); GetVersionEx(WindowsInfo); case WindowsInfo.dwPlatformId of VER_PLATFORM_WIN32_NT: begin if ( WindowsInfo.dwMajorVersion <= 4 ) then result := 'Microsoft Windows NT'; if (( WindowsInfo.dwMajorVersion = 5 ) and (WindowsInfo.dwMinorVersion = 0)) then result := 'Microsoft Windows 2000' else if (( WindowsInfo.dwMajorVersion = 5 ) and (WindowsInfo.dwMinorVersion > 1)) then result := 'Microsoft Windows XP'; end; VER_PLATFORM_WIN32_WINDOWS: begin if ((WindowsInfo.dwMajorVersion > 4) or ((WindowsInfo.dwMajorVersion = 4) and (WindowsInfo.dwMinorVersion = 0))) then result := 'Microsoft Windows 98' else if ((WindowsInfo.dwMajorVersion > 4) or ((WindowsInfo.dwMajorVersion = 4) and (WindowsInfo.dwMinorVersion = 90))) then result := 'Microsoft Windows ME' else result := 'Microsoft Windows 95'; end; else result := 'Win32s'; end; end;
用API GetVersion ,不过结果被编码了: Type TGetVer = record WinVer, WinRev, DosRev, DosVer: Byte; end; const VerStr = '%d.%d'; procedure TForm1.Button1Click(Sender: TObject); var AllVersions: TGetVer; begin AllVersions := TGetVer(GetVersion); Edit1.Text := Format(VerStr, [AllVersions.WinVer, AllVersions.WinRev]); Edit2.Text := Format(VerStr, [AllVersions.DOSVer, AllVersions.DOSRev]); end; 注:返回的版本和真实版本未必相同; Note2: Win32应用程序需要用GetVersionEx-------------------------------------------------------------------------------- {$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;-------------------------------------------------------------------------------- if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then ShowMessage('win9x'); if Win32Platform = VER_PLATFORM_WIN32_NT then ShowMessage('winNT');-------------------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var OS : TOSVersionInfo; begin OS.dwOSVersionInfoSize := sizeof(OS); GetVersionEx(OS); with OS do case dwPlatformId of VER_PLATFORM_WIN32s : label1.caption := 'Windows 3.1x/32s'; VER_PLATFORM_WIN32_WINDOWS : Begin if (dwMajorVersion = 4) and (dwMinorVersion > 0) then label1.caption := 'Windows 98' else label1.caption := 'Windows 95'; end; VER_PLATFORM_WIN32_NT : label1.caption := 'Windows NT' ; end; end;-------------------------------------------------------------------------------- Const cOsUnknown : Integer = -1; cOsWin95 : Integer = 0; cOsWin98 : Integer = 1; cOsWin98SE : Integer = 2; cOsWinME : Integer = 3; cOsWinNT : Integer = 4; cOsWin2000 : Integer = 5; cOsWhistler : Integer = 6; Function GetOSVersion : Integer; Function GetOSName( OSCode : Integer ) : String; Function GetOSVersion : Integer; Var osVerInfo : TOSVersionInfo; majorVer, minorVer : Integer; Begin Result := cOsUnknown; osVerInfo.dwOSVersionInfoSize := SizeOf( TOSVersionInfo ); If ( GetVersionEx( osVerInfo ) ) Then Begin majorVer := osVerInfo.dwMajorVersion; minorVer := osVerInfo.dwMinorVersion; Case ( osVerInfo.dwPlatformId ) Of VER_PLATFORM_WIN32_NT : { Windows NT/2000 } Begin If ( majorVer <= 4 ) Then Result := cOsWinNT Else If ( ( majorVer = 5 ) And ( minorVer= 0 ) ) Then Result := cOsWin2000 Else If ( ( majorVer = 5) And ( minorVer = 1 ) ) Then Result := cOsWhistler Else Result := cOsUnknown; End; VER_PLATFORM_WIN32_WINDOWS : { Windows 9x/ME } Begin If ( ( majorVer = 4 ) And ( minorVer = 0 ) ) Then Result := cOsWin95 Else If ( ( majorVer = 4 ) And ( minorVer = 10 ) ) Then Begin If ( osVerInfo.szCSDVersion[ 1 ] = 'A' ) Then Result := cOsWin98SE Else Result := cOsWin98; End Else If ( ( majorVer = 4) And ( minorVer = 90 ) ) Then Result := cOsWinME Else Result := cOsUnknown; End; Else Result := cOsUnknown; End; End Else Result := cOsUnknown; End; Function GetOSName( OSCode : Integer ) : String; Begin If ( OSCode = cOsUnknown ) Then Result := '(sconosciuto)' Else If ( OSCode = cOsWin95 ) Then Result := 'Microsoft Windows 95' Else If ( OSCode = cOsWin98 ) Then Result := 'Microsoft Windows 98' Else If ( OSCode = cOsWin98SE ) Then Result := 'Microsoft Windows 98 Second Edition' Else If ( OSCode = cOsWinME ) Then Result := 'Microsoft Windows Millennium Edition' Else If ( OSCode = cOsWinNT ) Then Result := 'Microsoft Windows New Technology' Else If ( OSCode = cOsWin2000 ) Then Result := 'Microsoft Windows 2000 / NT 5' Else Result := 'Microsoft Windows'; End;
下面的代码可以检查所用的系统是不是windows xp uses Registry; ... function IsWinXP: Boolean; begin Result := False; if Win32Platform = VER_PLATFORM_WIN32_NT then with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; if OpenKeyReadOnly('\Software\Microsoft\Windows NT\CurrentVersion') then Result := (ReadString('ProductName') = 'Microsoft Windows XP'); finally Free; end; end;//rock //转载请保留此信息
靠!他们写的代码那么长。看看下面我写的。procedure TForm1.Button1Click(Sender:TObject); var OSVI:OSVERSIONINFO; begin //设置版本信息结构的大小 OSVI.dwOSVersioninfoSize:=sizeof(OSVERSIONINFO); //获取版本信息 GetVersionEx(OSVI); //先是信息 Edit.Text:=IntToStr(OSVI.dwMajorVersion)+'.' +IntToStr(OSVI.dwMinorVersion)+'.' +IntToStr(OSVI.dwBuildNumber)+'.' +IntToStr(OSVI.dwPlatformld)+'.' +OSVI.szCSDVersion; end;
function Tform1.GetWindowsVersion : string;
var
WindowsInfo : TOSVersionInfo;
begin
WindowsInfo.dwOSVersionInfoSize := sizeof (OSVERSIONINFO);
GetVersionEx(WindowsInfo);
case WindowsInfo.dwPlatformId of
VER_PLATFORM_WIN32_NT:
begin
if ( WindowsInfo.dwMajorVersion <= 4 ) then
result := 'Microsoft Windows NT';
if (( WindowsInfo.dwMajorVersion = 5 ) and (WindowsInfo.dwMinorVersion = 0)) then
result := 'Microsoft Windows 2000'
else if (( WindowsInfo.dwMajorVersion = 5 ) and (WindowsInfo.dwMinorVersion > 1)) then
result := 'Microsoft Windows XP';
end;
VER_PLATFORM_WIN32_WINDOWS:
begin
if ((WindowsInfo.dwMajorVersion > 4) or ((WindowsInfo.dwMajorVersion = 4) and (WindowsInfo.dwMinorVersion = 0))) then
result := 'Microsoft Windows 98'
else if ((WindowsInfo.dwMajorVersion > 4) or ((WindowsInfo.dwMajorVersion = 4) and (WindowsInfo.dwMinorVersion = 90))) then
result := 'Microsoft Windows ME'
else
result := 'Microsoft Windows 95';
end;
else
result := 'Win32s';
end;
end;
Type
TGetVer = record
WinVer,
WinRev,
DosRev,
DosVer: Byte;
end;
const
VerStr = '%d.%d';
procedure TForm1.Button1Click(Sender: TObject);
var
AllVersions: TGetVer;
begin
AllVersions := TGetVer(GetVersion);
Edit1.Text := Format(VerStr, [AllVersions.WinVer, AllVersions.WinRev]);
Edit2.Text := Format(VerStr, [AllVersions.DOSVer, AllVersions.DOSRev]);
end;
注:返回的版本和真实版本未必相同;
Note2: Win32应用程序需要用GetVersionEx--------------------------------------------------------------------------------
{$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;--------------------------------------------------------------------------------
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
ShowMessage('win9x');
if Win32Platform = VER_PLATFORM_WIN32_NT then
ShowMessage('winNT');--------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
OS : TOSVersionInfo;
begin
OS.dwOSVersionInfoSize := sizeof(OS);
GetVersionEx(OS);
with OS do
case dwPlatformId of
VER_PLATFORM_WIN32s :
label1.caption := 'Windows 3.1x/32s';
VER_PLATFORM_WIN32_WINDOWS :
Begin
if (dwMajorVersion = 4) and (dwMinorVersion > 0) then
label1.caption := 'Windows 98'
else
label1.caption := 'Windows 95';
end;
VER_PLATFORM_WIN32_NT :
label1.caption := 'Windows NT' ;
end;
end;--------------------------------------------------------------------------------
Const cOsUnknown : Integer = -1; cOsWin95 : Integer = 0; cOsWin98 : Integer = 1; cOsWin98SE : Integer = 2; cOsWinME : Integer = 3; cOsWinNT : Integer = 4; cOsWin2000 : Integer = 5; cOsWhistler : Integer = 6; Function GetOSVersion : Integer; Function GetOSName( OSCode : Integer ) : String; Function GetOSVersion : Integer; Var osVerInfo : TOSVersionInfo; majorVer, minorVer : Integer; Begin Result := cOsUnknown; osVerInfo.dwOSVersionInfoSize := SizeOf( TOSVersionInfo ); If ( GetVersionEx( osVerInfo ) ) Then Begin majorVer := osVerInfo.dwMajorVersion; minorVer := osVerInfo.dwMinorVersion; Case ( osVerInfo.dwPlatformId ) Of VER_PLATFORM_WIN32_NT : { Windows NT/2000 } Begin If ( majorVer <= 4 ) Then Result := cOsWinNT Else If ( ( majorVer = 5 ) And ( minorVer= 0 ) ) Then Result := cOsWin2000 Else If ( ( majorVer = 5) And ( minorVer = 1 ) ) Then Result := cOsWhistler Else Result := cOsUnknown; End; VER_PLATFORM_WIN32_WINDOWS : { Windows 9x/ME } Begin If ( ( majorVer = 4 ) And ( minorVer = 0 ) ) Then Result := cOsWin95 Else If ( ( majorVer = 4 ) And ( minorVer = 10 ) ) Then Begin If ( osVerInfo.szCSDVersion[ 1 ] = 'A' ) Then Result := cOsWin98SE Else Result := cOsWin98; End Else If ( ( majorVer = 4) And ( minorVer = 90 ) ) Then Result := cOsWinME Else Result := cOsUnknown; End; Else Result := cOsUnknown; End; End Else Result := cOsUnknown; End; Function GetOSName( OSCode : Integer ) : String; Begin If ( OSCode = cOsUnknown ) Then Result := '(sconosciuto)' Else If ( OSCode = cOsWin95 ) Then Result := 'Microsoft Windows 95' Else If ( OSCode = cOsWin98 ) Then Result := 'Microsoft Windows 98' Else If ( OSCode = cOsWin98SE ) Then Result := 'Microsoft Windows 98 Second Edition' Else If ( OSCode = cOsWinME ) Then Result := 'Microsoft Windows Millennium Edition' Else If ( OSCode = cOsWinNT ) Then Result := 'Microsoft Windows New Technology' Else If ( OSCode = cOsWin2000 ) Then Result := 'Microsoft Windows 2000 / NT 5' Else Result := 'Microsoft Windows'; End;
uses Registry;
... function IsWinXP: Boolean;
begin
Result := False;
if Win32Platform = VER_PLATFORM_WIN32_NT then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKeyReadOnly('\Software\Microsoft\Windows NT\CurrentVersion') then
Result := (ReadString('ProductName') = 'Microsoft Windows XP');
finally
Free;
end;
end;//rock
//转载请保留此信息
var
OSVI:OSVERSIONINFO;
begin
//设置版本信息结构的大小
OSVI.dwOSVersioninfoSize:=sizeof(OSVERSIONINFO);
//获取版本信息
GetVersionEx(OSVI);
//先是信息
Edit.Text:=IntToStr(OSVI.dwMajorVersion)+'.'
+IntToStr(OSVI.dwMinorVersion)+'.'
+IntToStr(OSVI.dwBuildNumber)+'.'
+IntToStr(OSVI.dwPlatformld)+'.'
+OSVI.szCSDVersion;
end;