怎样在程序中识别目前的操作系统是98、2000还是xp等?

解决方案 »

  1.   

    /// <summary>
    /// 返回注册表中相关Windows系统版本信息
    /// </summary>
    /// <returns> Windows系统版本信息 </returns>
    function GetSystemVer: string;
    begin
      FRegEdit.RootKey := HKEY_LOCAL_MACHINE;
      if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
        FRegEdit.OpenKey('Software\Microsoft\Windows\CurrentVersion', False);
      if Win32Platform = VER_PLATFORM_WIN32_NT then
        FRegEdit.OpenKey('Software\Microsoft\Windows NT\CurrentVersion', False);
      Result := FRegEdit.ReadString('ProductName');
      FRegEdit.CloseKey;
    end;
      

  2.   

    哦对了,这是部分代码......哈哈,原理就是....
    FRegEdit.RootKey := HKEY_LOCAL_MACHINE; <---- 注意这个如果是Win32Platform = VER_PLATFORM_WIN32_WINDOWS就从注册表中取
    'Software\Microsoft\Windows\CurrentVersion' 中ProductName的值
    如果是Win32Platform = VER_PLATFORM_WIN32_NT 就从注册表中取
    'Software\Microsoft\Windows NT\CurrentVersion'中ProductName的值
      

  3.   

    //get windows platform version information
    const
      cOsUnknown       = $00000000 ;
      cOsWin31         = $00000010 ;
      cOsWin95         = $00000020 ;
      cOsWin95OSR2     = $00000022 ;
      cOsWin98         = $00000030 ;
      cOsWin98SE       = $00000032 ;
      cOsWinME         = $00000040 ;
      cOsWinNT         = $00000050 ;
    //  cOsWinNT351      =  $00000053;
    //  cOsWinNT40       =  $00000055;
      cOsWin2000       = $00000060 ;
      cOsWinXP         = $00000070;
      cOsWinServer     = $00000080;
    function GetOSVersionEx : Integer;
    var
        osVerInfo          : TOSVersionInfo;
        majorVer, minorVer : Integer;
    begin
      Result := cOsUnknown;
      osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
      if GetVersionEx(osVerInfo) then
      begin
        majorVer := osVerInfo.dwMajorVersion;
        minorVer := osVerInfo.dwMinorVersion;
        case osVerInfo.dwPlatformId of
          VER_PLATFORM_WIN32S         : Result := cOsWin31 ; // win31
          VER_PLATFORM_WIN32_WINDOWS  : // win95/98/me
            case minorVer of
              0   : if OsVerInfo.szCSDVersion = 'C' then
                       Result := cOsWin95OSR2
                    else
                       Result := cOsWin95 ;
              10  : if OsVerInfo.szCSDVersion = 'A' then
                       Result := cOsWin98SE
                    else
                       Result := cOsWin98 ;
              90  : Result := cOsWinMe ;
            end;
          VER_PLATFORM_WIN32_NT      : // Windows NT/2000/XP/Server 2003 family 
            case majorVer of
              3 : Result := cOsWinNT ;
                  //Result := cOsWinNT351 ;
              4 : Result := cOsWinNT ;
                  //Result := cOsWinNT40 ;
              5 : case minorVer of
                    0 : Result := cOsWin2000 ;
                    1 : Result := cOsWinXP ;
                    2 : Result := cOsWinServer
                  end ;
            end;
        end;
      end;
    end;
    enjoy.
    adayuer
      

  4.   

    Function GetOSVersion : Integer;
      Var
          osVerInfo          : TOSVersionInfo;
          majorVer, minorVer : Integer;
      Begin
          Result := cOsUnknown;
          osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
          If ( GetVersionEx(osVerInfo) ) Then Begin
              majorVer := osVerInfo.dwMajorVersion;
              minorVer := osVerInfo.dwMinorVersion;
              Case ( osVerInfo.dwPlatformId ) Of
                  VER_PLATFORM_WIN32_NT : { Windows NT/2000 }
                      Begin
                          If ( majorVer <= 4 ) Then
                              Result := cOsWinNT
                          Else
                              If ( ( majorVer = 5 ) And ( minorVer= 0 ) ) Then
                                  Result := cOsWin2000
                              Else
                                  If ( ( majorVer = 5) And ( minorVer = 1 ) ) Then
                                      Result := cOsWhistler
                                  Else
                                      Result := cOsUnknown;
                      End;
                  VER_PLATFORM_WIN32_WINDOWS :  { Windows 9x/ME }
                      Begin
                          If ( ( majorVer = 4 ) And ( minorVer = 0 ) ) Then
                              Result := cOsWin95
                          Else If ( ( majorVer = 4 ) And ( minorVer = 10 ) ) Then Begin
                              If ( osVerInfo.szCSDVersion[ 1 ] = 'A' ) Then
                                  Result := cOsWin98SE
                              Else
                                  Result := cOsWin98;
                          End Else If ( ( majorVer = 4) And ( minorVer = 90 ) ) Then
                              Result := cOsWinME
                          Else
                              Result := cOsUnknown;
                      End;
              Else
                  Result := cOsUnknown;
              End;
          End Else
              Result := cOsUnknown;
      End;
      

  5.   

    FRegEdit.RootKey := HKEY_LOCAL_MACHINE;请问FRegEdit在哪儿定义的啊?
      

  6.   

    哦 小白 hehe^^ 那是我在组件中定义的一个成员变量uses
      Registry...
        FRegEdit: TRegistry;就是操作注册表的那个对象
      

  7.   

    /// <summary>
    /// 获取PC基础信息
    /// 1.操作系统版本名称
    /// </summary>
    /// <author> wangjun </author>
    /// <date> 2004-06-14 </date>
    unit SystemInfo;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Registry, MMDefault;type
      TMMSystemInfo = class (TComponent)
      private
        FAbout: TMMAboutString;
        FActive: Boolean;
        FRegEdit: TRegistry;
        FWindowsProductName: string;
        procedure SetActive(const Value: Boolean);
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        function GetSystemVer: string;
      published
        property About: TMMAboutString read FAbout write FAbout;
        property Active: Boolean read FActive write SetActive default False;
        property WindowsProductName: string read FWindowsProductName write 
                FWindowsProductName;
      end;
      
    implementation{ TMMSystemInfo }{
    ******************************** TMMSystemInfo *********************************
    }
    constructor TMMSystemInfo.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FRegEdit := TRegistry.Create;
    end;destructor TMMSystemInfo.Destroy;
    begin
      FRegEdit.Free;
      inherited Destroy;
    end;/// <summary>
    /// 返回注册表中相关Windows系统版本信息
    /// </summary>
    /// <returns> Windows系统版本信息 </returns>
    function TMMSystemInfo.GetSystemVer: string;
    begin
      FRegEdit.RootKey := HKEY_LOCAL_MACHINE;
      if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
        FRegEdit.OpenKey('Software\Microsoft\Windows\CurrentVersion', False);
      if Win32Platform = VER_PLATFORM_WIN32_NT then
        FRegEdit.OpenKey('Software\Microsoft\Windows NT\CurrentVersion', False);
      Result := FRegEdit.ReadString('ProductName');
      FRegEdit.CloseKey;
    end;procedure TMMSystemInfo.SetActive(const Value: Boolean);
    begin
      if Value then
      begin
        FWindowsProductName := GetSystemVer;
        FActive := True;
      end
      else begin
        FWindowsProductName := '';
        FActive := False;
      end;
    end;end.这是全部的源代码..... 当然如果想放到Delphi IDE 组件列表中还要用到一个注册文件不过我想这些代码足够解决这个问题了...