请问如何获得当前系统的具体类型?
使用GetVersionEX只能获得大体的类型,比如win2000,winxp,windows .net server
请问怎样可以定位到具体的版本类型,比如Window 2000 Server
另外,好像GetVersionEX好像也区别不了winxp和windows .net server

解决方案 »

  1.   

    GetVersionEX不是还可以得到附加版本号么,判断这个就可以了.
      

  2.   

    一个函数和一个过程函数:用来判断系统版本号function GetOSVersion;
    var
      OSVI :TOSVersionInfo;
    begin
      ZeroMemory(@OSVI, SizeOf(OSVI));
      OSVI.dwOSVersionInfoSize := SizeOf(OSVI);
      GetVersionEx(OSVI);
      Result := OSUnknown;
      if OSVI.dwPlatformId = VER_PLATFORM_WIN32_NT then
        begin
          case OSVI.dwMajorVersion of
            3: Result := OSNT3;
            4: Result := OSNT4;
            5: Result := OS2K;
          end;
          if (OSVI.dwMajorVersion = 5) and (OSVI.dwMinorVersion = 1) then
            begin
              Result:=osXP;
            end else
            begin
              if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 0) then
                begin
                  Result := OS95;
                  if (Trim(OSVI.szCSDVersion) = 'B') then
                    Result :=OS95OSR2;
                end else
                if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 10) then
                  begin
                    Result := OS98;
                    if (Trim(OSVI.szCSDVersion) = 'A') then
                      Result := OS98SE;
                  end else
                    if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 90) then
                      Result := OSME;
            end;
        end;
    end;
    过程:用来显示系统版本号procedure GetOSVersionA;
    var
      OS: TOSVersion;
      OSVersion: String;
    begin
      OS := GetOSVersion;;
      case OS of
        OS95: OSVersion:='Microsoft Windows 95';
        OS95OSR2: OSVersion:='Microsoft Windows 95 OSR2';
        OS98: OSVersion:='Microsoft Windows 98';
        OS98SE: OSVersion:='Microsoft Windows 98 Second Edition';
        OSME: OSVersion:='Microsoft Windows Millenium Edition';
        OSNT3: OSVersion:='Microsoft Windows NT 3.X';
        OSNT4: OSVersion:='Microsoft Windows NT 4.X';
        OS2K: OSVersion:='Microsoft Windows 2000';
        OSXP: OSVersion:='Microsoft Windows XP';
      end;
      Label_OSVersion.Caption := OSVersion ; //修改这里的VCL名称为你用的
    end;
      

  3.   

    Cappuccino(小喆):
      可你还是没有解决我的问题啊。
      

  4.   

    你是不是要判断是专业办,还是服务器版之类的?那我有个建议,哈~你去读注册表吧~`里面有阿~~
    系统全称~`版本号 Service pack 号都有~
      

  5.   

    试一试我写的这个函数:
    function GetWindowsVersionString: string;
    begin
      case Win32Platform of
        VER_PLATFORM_WIN32s:
          Result := 'Windows 3.x';
        VER_PLATFORM_WIN32_WINDOWS:
          Result := 'Windows 9x';
        VER_PLATFORM_WIN32_NT:
          case Win32MajorVersion of
            3, 4: Result := 'Windows NT';
            5: if Win32MinorVersion > 0 then
                 Result := 'Windows XP'
               else
                 Result := 'Windows 2000';
            else  Result := 'Windows XP';
          end;
        else Result := 'Windows';
      end;
      Result := Format('%s %u.%u (Build %u) %s', [Result, Win32MajorVersion, Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]);
    end;