procedure TAboutForm.SetSysInfo;
const
  WIN32S = 'Windows 3.1x running Win32s';
  WIN32WINDOWS = 'Windows 95';
  WIN32NT = 'Windows NT';
  FORMATOSSTR = '%s %d.%d ';
var
  VI: TOSVersionInfo;
  SI: TSystemInfo;
  MS: TMemoryStatus;
begin
  VI.dwOSVersionInfoSize := SizeOf(VI);
  GetVersionEx(VI);
  case VI.dwPlatformId of
    VER_PLATFORM_WIN32S:
      lblOS.Caption := Format(FORMATOSSTR, [WIN32S, VI.dwMajorVersion,
        VI.dwMinorVersion]);
    VER_PLATFORM_WIN32_WINDOWS:
      lblOS.Caption := Format(FORMATOSSTR, [WIN32WINDOWS, VI.dwMajorVersion,
        VI.dwMinorVersion]);
    VER_PLATFORM_WIN32_NT:
      lblOS.Caption := Format(FORMATOSSTR, [WIN32NT, VI.dwMajorVersion,
        VI.dwMinorVersion]);
  end;
end;

解决方案 »

  1.   

    procedure TInfoForm.GetOSVerInfo;
    var
      VI: TOSVersionInfo;
    begin
      VI.dwOSVersionInfoSize := SizeOf(VI);
      GetVersionEx(VI);
      with InfoLB.Items, VI do
      begin
        Clear;
        Add(Format(SOSVer, [dwMajorVersion, dwMinorVersion]));
        Add(Format(SBuildNo, [LoWord(dwBuildNumber)]));
        case dwPlatformID of
          VER_PLATFORM_WIN32S: Add(Format(SOSPlat, [SOSWin32s]));
          VER_PLATFORM_WIN32_WINDOWS: Add(Format(SOSPlat, [SOSWin95]));
          VER_PLATFORM_WIN32_NT: Add(Format(SOSPlat, [SOSWinNT]));
        end;
      end;
    end;
      

  2.   

    如果要得到操作系统的信息,如下即可:
    (Delphi 6)case Win32Platform ofVER_PLATFORM_WIN32_WINDOWS:ShowMessage ('Windows 9x');VER_PLATFORM_WIN32_NT:ShowMessage ('Windows NT');end;ShowMessage ('Running on Windows:'+IntToStr (Win32MajorVersion)+'.'+ IntToStr (Win32MinorVersion)+' ((Build '+IntToStr (Win32BuildNumber)+')'+#10#13 +'Update:'+Win32CSDVersion);没有理由再调用GetVersion或者GetVersionEx了。
      

  3.   

    如果非要调用,可以尝试动态调用DLL的方法://==============================================================================
    //获得操作系统版本号************************************************************
    //==============================================================================
    function GetWindowsVersion(var Major, Minor: integer): string;
    var
      {$IFDEF WIN32}
      lpOS, lpOS2: POsVersionInfo;
      OSVerProc: function(lpOs: pointer): BOOL; stdcall;
      OSVerHandle: THandle;
      {$ELSE}
      lp: longint;
      {$ENDIF}
    begin
      {$IFDEF WIN32}
      GetMem(lpOS, SizeOf(TOsVersionInfo));
      lpOs^.dwOSVersionInfoSize := SizeOf(TOsVersionInfo);
      //============================================================================
      //调用DLL例程*****************************************************************
      //============================================================================
      OSVerHandle := LoadLibrary('kernel32');
      if OSVerHandle<=0
      then raise Exception.Create('动态链接库kernel32加载失败,错误代码:'+IntToStr(GetLastError))
      else @OSVerProc := GetProcAddress(OSVerHandle, 'GetVersionExA');
      if not Assigned(OSVerProc)
      then raise Exception.Create('动态链接库kernel32函数GetVersionExA加载失败,错误代码:'+IntToStr(GetLastError))
      else while not OSVerProc(lpOS) do
           begin
             GetMem(lpos2, lpos^.dwOSVersionInfoSize + 1);
             lpOs2^.dwOSVersionInfoSize := lpOs^.dwOSVersionInfoSize + 1;
             FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
             lpOS := lpOs2;
           end;
      Major := lpOs^.dwMajorVersion;
      Minor := lpOs^.dwMinorVersion;
      FreeLibrary(OSVerHandle);
      FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
      {$ELSE}
      lp := GetVersion;
      Major := LoByte(LoWord(lp));
      Minor := HiByte(LoWord(lp));
      {$ENDIF}
      case Win32Platform of
        VER_PLATFORM_WIN32_WINDOWS: Result := 'Win9x';
        VER_PLATFORM_WIN32_NT:      Result := 'WinNT';
      end;
    end;