怎样准确的分辨现在操作系统类型:win98,win98se,winme,winxp,winnt4,win2000请给出详细代码!(50分)

  • 主题发起人 主题发起人 duducat
  • 开始时间 开始时间
D

duducat

Unregistered / Unconfirmed
GUEST, unregistred user!
请给出详细代码!可以不断加分!
 
GetVersionEx
 
procedure TForm1.Button1Click(Sender: TObject);
var
osinfo: OSVERSIONINFO;
begin
osinfo.dwOSVersionInfoSize := sizeof(OSVERSIONINFO);
GetVersionEx(osinfo);
ShowMessage(InttoStr(osinfo.dwMajorVersion) + '.' + IntToStr(osinfo.dwMinorVersion) + '.' + IntToStr(osinfo.dwBuildNumber));
end;
 
onst
OS_WINNT = 1; { WINDOWS NT}
OS_WIN32 = 0; { WINDOWS 95 OR 98}
OS_WINS = 2; { WIN32 OR WIN3.1}
OS_WINNT4 = 3; { WINNT 4 }
OS_WIN2k = 4; { Win2k }


function WinVer: Integer;
var
OSVerInfo: TOSVersionInfo;
begin
try
OSVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(OSVerInfo);
result := OSVerInfo.dwMajorVersion;
case OSVerInfo.dwPlatformID of
VER_PLATFORM_WIN32s: Result := OS_WINS;
VER_PLATFORM_WIN32_WINDOWS: result := OS_WIN32;
VER_PLATFORM_WIN32_NT: begin
case OSVerInfo.dwMajorVersion of
1: result := OS_WINNT;
2: result := OS_WINNT;
3: result := OS_WINNT;
4: result := OS_WINNT4;
5: result := OS_WIN2k;
end;
end
else
result := OSVerInfo.dwPlatformID;
end;
except
result := -1;
end;
end;
以上是我自己的函数,可是不能分辨Winme和WINXP和Win98se???
 
使用osinfo.dwMinorVersion
或者osinfo.dwBuildNumber来进行呀。
 
to yzhshi
明白了!可是我现在使用机房和网吧的机子!无法装多重操作系统进行测试:((
你能不能帮我测试一下,给出详细代码!我可以给你不断加分哟!!!谢谢!
其他高手帮助我解决问题的也可以加分的!!!!
 
最好还能分辨UNIX和Lunix!!
 
俺只有98、2000和me、xp,一会给你这四个的dwMinorVersion。稍等……
 
windows me 4.90.73010104
windows 2000 5.0.2195
windows 98 4.10.67766446
windows xp俺得重新启动计算机,稍等
 
呵呵,俺回来了,其实笨了,早就听说是2600的。
确切是:5.1.2600
所以说可以通过次版本号来判断具体平台,不要通过BuildVersion,这个有可能有差别
 
to yzhshi
啊!???????????不过还是先谢谢了!
俺先给你加分拉!

所以说可以通过次版本号来判断具体平台??怎么实施呀!!!:))))
高手请给出详细代码!!
 
function GetWindowsVersion: string;
var
// windows api structure
VersionInfo: TOSVersionInfo;
begin
// get size of the structure
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
// populate the struct using api call
GetVersionEx(VersionInfo);
// platformid gets the core platform
// major and minor versions also included.
with VersionInfo do
begin
case dwPlatformid of
0 : begin
result := 'Windows 3.11';
end; // end 0

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; // end 10
90 : result := 'Windows Millenium';
else
result := 'Unknown Version';
end; // end case
end; // end 1

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 Whistler';
end; // end case
end; // end 5
else
result := 'Unknown Version';
end; // end case
// service packs apply to the NT/2000 platform
if szCSDVersion <> '' then
result := result + ' Service pack: ' + szCSDVersion;
end; // end 2
else
result := 'Unknown Platform';
end; // end case
// add build info.
result := result + ', Build: ' +
IntToStr(Loword(dwBuildNumber)) ;
end; // end version info
end; // GetWindowsVersion

WindowsXP没用过,你自己检查一下osv.dwMajorVersion就可以了,因为NT是4,2000是5
 
接受答案了.
 
to HD_Copy
高手你的代码很详细!谢谢!我另外发个帖子,给你加分吧!
to yzhshi
你能不能帮我测试下WINXP下的函数:)谢谢再给你加分哟!
 
HD_Copy兄,你的Windows Whistler好像就是xp啊,因为windows xp 的

dwPlatformId=VER_PLATFORM_WIN32_NT {2}
dwMinorVersion= 5
dwMinorVersion=1

不过你写的可够全的,我刚刚照操了一份放到程序里了,谢了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部