请问怎么用Delphi判断操作系统是Profassional还是Server?好像API函数只能判断到2K这个层次,再细分就不行了。

解决方案 »

  1.   

    我已经找到方法了,结贴!方法如下: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;