uses TypInfo; {$R *.dfm} type TOSVersion = (osUnknown, os95, os95OSR2, os98, os98SE, osNT3, osNT4, os2K, osME,osXP); //获取操作系统 function GetOS:TOSVersion; var OS :TOSVersionInfo; begin ZeroMemory(@OS,SizeOf(OS)); OS.dwOSVersionInfoSize:=SizeOf(OS); GetVersionEx(OS); Result:=osUnknown; if OS.dwPlatformId=VER_PLATFORM_WIN32_NT then begin case OS.dwMajorVersion of 3: Result:=osNT3; 4: Result:=osNT4; 5: begin if OS.dwMinorVersion>=1 then Result:=osXP else Result:=os2K; end; end; end else begin if (OS.dwMajorVersion=4) and (OS.dwMinorVersion=0) then begin Result:=os95; if (Trim(OS.szCSDVersion)='B') then Result:=os95OSR2; end else if (OS.dwMajorVersion=4) and (OS.dwMinorVersion=10) then begin Result:=os98; if (Trim(OS.szCSDVersion)='A') then Result:=os98SE; end else if (OS.dwMajorVersion=4) and (OS.dwMinorVersion=90) then Result:=osME; end; end; procedure TForm1.FormCreate(Sender: TObject); begin showmessage(GetEnumName(TypeInfo(TOSVersion),Ord(GetOS))); end;
function GetWindowsVersion: string; var VersionInfo: TOSVersionInfo; begin VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo); GetVersionEx(VersionInfo); with VersionInfo do begin case dwPlatformid of 0: result := 'Windows 3.11'; 1: begin case dwMinorVersion of 0 : result := 'Windows 95'; 10: begin if (szCSDVersion[1] = 'A') then Result :='Windows 98 SE' else Result := 'Windows 98'; end; 90: result := 'Windows Millenium'; else result := 'Unknown Version'; end; end; 2: begin case dwMajorVersion of 3: result := 'Windows NT ' + IntToStr(dwMajorVersion) + '.' + IntToStr(dwMinorVersion); 4: result := 'Windows NT ' + IntToStr(dwMajorVersion) + '.' + IntToStr(dwMinorVersion); 5: begin case dwMinorVersion of 0: result := 'Windows 2000'; 1: result := 'Windows XP'; end; end; else result := 'Unknown Version'; end; if szCSDVersion <> '' then result := result + ' Service pack: ' + szCSDVersion; end; else result := 'Unknown Platform'; end; result := result + ', Build: ' + IntToStr(Loword(dwBuildNumber)) ; end; end;
case Win32Platform of VER_PLATFORM_WIN32_WINDOWS: showmessage('win98') VER_PLATFORM_WIN32_NT: showmessage('winnt') end;
{$R *.dfm}
type
TOSVersion = (osUnknown, os95, os95OSR2, os98, os98SE, osNT3, osNT4, os2K, osME,osXP);
//获取操作系统
function GetOS:TOSVersion;
var
OS :TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
Result:=osUnknown;
if OS.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
case OS.dwMajorVersion of
3: Result:=osNT3;
4: Result:=osNT4;
5: begin
if OS.dwMinorVersion>=1 then
Result:=osXP
else
Result:=os2K;
end;
end;
end
else
begin
if (OS.dwMajorVersion=4) and (OS.dwMinorVersion=0) then
begin
Result:=os95;
if (Trim(OS.szCSDVersion)='B') then
Result:=os95OSR2;
end
else
if (OS.dwMajorVersion=4) and (OS.dwMinorVersion=10) then
begin
Result:=os98;
if (Trim(OS.szCSDVersion)='A') then
Result:=os98SE;
end
else
if (OS.dwMajorVersion=4) and (OS.dwMinorVersion=90) then
Result:=osME;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage(GetEnumName(TypeInfo(TOSVersion),Ord(GetOS)));
end;
var
VersionInfo: TOSVersionInfo;
begin
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
GetVersionEx(VersionInfo);
with VersionInfo do
begin
case dwPlatformid of
0: result := 'Windows 3.11'; 1:
begin
case dwMinorVersion of
0 : result := 'Windows 95';
10:
begin
if (szCSDVersion[1] = 'A') then
Result :='Windows 98 SE'
else
Result := 'Windows 98';
end;
90: result := 'Windows Millenium';
else
result := 'Unknown Version';
end;
end;
2:
begin
case dwMajorVersion of
3: result := 'Windows NT ' +
IntToStr(dwMajorVersion) + '.' +
IntToStr(dwMinorVersion);
4: result := 'Windows NT ' +
IntToStr(dwMajorVersion) + '.' +
IntToStr(dwMinorVersion);
5:
begin
case dwMinorVersion of
0: result := 'Windows 2000';
1: result := 'Windows XP';
end;
end;
else
result := 'Unknown Version';
end;
if szCSDVersion <> '' then
result := result + ' Service pack: ' + szCSDVersion;
end;
else
result := 'Unknown Platform';
end;
result := result + ', Build: ' +
IntToStr(Loword(dwBuildNumber)) ;
end;
end;
VER_PLATFORM_WIN32_WINDOWS:
showmessage('win98')
VER_PLATFORM_WIN32_NT:
showmessage('winnt')
end;