请问怎么用Delphi判断操作系统是Profassional还是Server?

moonet 2002-11-21 07:50:41
请问怎么用Delphi判断操作系统是Profassional还是Server?好像API函数只能判断到2K这个层次,再细分就不行了。
...全文
37 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
moonet 2002-11-23
  • 打赏
  • 举报
回复
我已经找到方法了,结贴!方法如下:

function IsWin31 : Boolean;
var OS : TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
Result := (Os.dwPlatformId = VER_PLATFORM_WIN32s);
end;

function IsWin95OSR2 : Boolean;
var OS : TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
result:=(OS.dwMajorVersion >= 4) and (OS.dwMinorVersion = 0) and
(OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
end;

function IsWin95 : Boolean;
var
OS :TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
result:=(OS.dwMajorVersion >= 4) and (OS.dwMinorVersion = 0) and
(lo(OS.dwBuildNumber) > 1000) and (OS.dwPlatformId =
VER_PLATFORM_WIN32_WINDOWS);
end;

function IsWinNT: Boolean;
var OS :TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
result:=OS.dwPlatformId=VER_PLATFORM_WIN32_NT;
end;

function IsWin98se : Boolean;
var OS :TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
result:=(OS.dwMajorVersion >= 4) and (OS.dwMinorVersion > 0) and
(OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
//and (lo(OS.dwBuildNumber) > 2000) removed because of Will never find SE
end;

function IsWin98 : Boolean;
var OS :TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
result:=(OS.dwMajorVersion >= 4) and (OS.dwMinorVersion > 0) and
(OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
end;

function IsWin2000 : Boolean;
var OS :TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
result := (OS.dwMajorVersion >= 5) and (OS.dwPlatformId =
VER_PLATFORM_WIN32_NT);
end;

function IsWinXP : Boolean;
var OS :TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
result := (OS.dwMajorVersion >= 5) and (OS.dwMinorVersion >= 1) and
(OS.dwPlatformId = VER_PLATFORM_WIN32_NT);
end;


function IsWinMe : Boolean;
var OS :TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize:=SizeOf(OS);
GetVersionEx(OS);
result:=(OS.dwMajorVersion >= 4) and (OS.dwMinorVersion >= 90) and
(OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
end;


function GetNTType : String;
var r : TRegistry;
ts : String;
begin

Result := '[NT Variant]';

if IsWinNT then
begin
r := TRegistry.Create;
r.RootKey := HKEY_LOCAL_MACHINE;
r.OpenKeyReadOnly('SYSTEM\CurrentControlSet\Control\ProductOptions');
ts := AnsiUpperCase(R.ReadString('ProductType'));
r.Free;
if (ts = 'WINNT') then
begin
result := 'Windows NT Workstation';
if IsWin2000 then
result := 'Windows 2000 Professional';
end
else if (ts = 'SERVERNT') then
begin
result := 'Server';
end
else if (ts = 'LANMANNT') then
begin
result := 'Windows 2000 Advanced Server';
end;
end;

end;


procedure OS_INFO;
Begin
if IsWinXP = TRUE then begin
GETOS := 'Windows XP';
GETOSMajor := 'Windows NTx';
end
else
if IsWinMe = TRUE then begin
GETOS := 'Windows ME';
GETOSMajor := 'Windows 9x';
end
else
if IsWin98se = TRUE then begin
GETOS := 'Windows 98SE';
GETOSMajor := 'Windows 9x';
end
else
if IsWin98 = TRUE then begin
GETOS := 'Windows 98';
GETOSMajor := 'Windows 9x';
end
else
if IsWin95OSR2 = TRUE then begin
GETOS := 'Windows 95B';
GETOSMajor := 'Windows 9x';
end
else
if IsWin95 = TRUE then begin
GETOS := 'Windows 95A';
GETOSMajor := 'Windows 9x';
end
else
if IsWinNT = TRUE then begin
GETOSMajor := 'Windows NTx';
GETOS := GetNTType;
end;
end;
moonet 2002-11-22
  • 打赏
  • 举报
回复
注册表的什么地方可以判断呢?
Sumie@Sam 2002-11-22
  • 打赏
  • 举报
回复
根据注册表当中的信息来判断

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧