网上有代码,都是获取版本号,我想获取系统描述,比如“Windows XP Home”或“Windows XP professional”

解决方案 »

  1.   

    以前写了个获取版本号的,也不能获取Home或者Professional今天重新Google了下GetVersionExA,找到了一段代码,我添加了识别Vista和Seven。楼主可以参考下。http://download.csdn.net/source/2990082
      

  2.   

    http://msdn.microsoft.com/en-us/library/ms724833(v=vs.85).aspx
    重点看这个字段:wSuiteMask
      

  3.   


    unit Unit1;interfaceuses
      Windows, SysUtils, Forms, StdCtrls, Classes, Controls;
    {$IFDEF CONDITIONALEXPRESSIONS}
      {$IF Defined(TOSVersionInfoEx)}
        {$DEFINE TOSVERSIONINFOEX_DEFINED}
      {$IFEND}
    {$ENDIF}
    {$IFNDEF TOSVERSIONINFOEX_DEFINED}type
      POSVersionInfoEx = ^TOSVersionInfoEx;
      TOSVersionInfoEx = packed record
        dwOSVersionInfoSize: DWORD;
        dwMajorVersion     : DWORD;
        dwMinorVersion     : DWORD;
        dwBuildNumber      : DWORD;
        dwPlatformId       : DWORD;
        szCSDVersion       : array [0..127] of AnsiChar;
        wServicePackMajor  : Word;
        wServicePackMinor  : Word;
        wSuiteMask         : Word;
        wProductType       : Byte;
        wReserved          : Byte;
      end;const
      VER_SERVER_NT                       = $80000000;
      {$EXTERNALSYM VER_SERVER_NT}
      VER_WORKSTATION_NT                  = $40000000;
      {$EXTERNALSYM VER_WORKSTATION_NT}
      VER_SUITE_SMALLBUSINESS             = $00000001;
      {$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
      VER_SUITE_ENTERPRISE                = $00000002;
      {$EXTERNALSYM VER_SUITE_ENTERPRISE}
      VER_SUITE_BACKOFFICE                = $00000004;
      {$EXTERNALSYM VER_SUITE_BACKOFFICE}
      VER_SUITE_COMMUNICATIONS            = $00000008;
      {$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
      VER_SUITE_TERMINAL                  = $00000010;
      {$EXTERNALSYM VER_SUITE_TERMINAL}
      VER_SUITE_SMALLBUSINESS_RESTRICTED  = $00000020;
      {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
      VER_SUITE_EMBEDDEDNT                = $00000040;
      {$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
      VER_SUITE_DATACENTER                = $00000080;
      {$EXTERNALSYM VER_SUITE_DATACENTER}
      VER_SUITE_SINGLEUSERTS              = $00000100;
      {$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
      VER_SUITE_PERSONAL                  = $00000200;
      {$EXTERNALSYM VER_SUITE_PERSONAL}
      VER_SUITE_BLADE                     = $00000400;
      {$EXTERNALSYM VER_SUITE_BLADE}
      VER_SUITE_EMBEDDED_RESTRICTED       = $00000800;
      {$EXTERNALSYM VER_SUITE_EMBEDDED_RESTRICTED}
      VER_SUITE_SECURITY_APPLIANCE        = $00001000;
      {$EXTERNALSYM VER_SUITE_SECURITY_APPLIANCE}const
      VER_NT_WORKSTATION              = $0000001;
      {$EXTERNALSYM VER_NT_WORKSTATION}
      VER_NT_DOMAIN_CONTROLLER        = $0000002;
      {$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER}
      VER_NT_SERVER                   = $0000003;
      {$EXTERNALSYM VER_NT_SERVER}{$ENDIF}  // TOSVERSIONINFOEX_DEFINEDtype
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  function GetVersionExA(var lpVersionInformation: TOSVersionInfoEX): BOOL;
            stdcall; external kernel32;var
    Form1:TForm1;implementation{$R *.dfm}function GetOSVersionText: string;
    var
      Info: TOSVersionInfoEx;
      Key: HKEY;
    begin
      Result := '';
      Info.dwOSVersionInfoSize:=SizeOf(TOSVersionInfoEx);
      if (not GetVersionExA(Info)) then
        Exit;
      Result:='Microsoft ';
      case Info.dwPlatformId of
        { Win32s }
        VER_PLATFORM_WIN32s:
          Result := Result+'Win32s';
        { Windows 9x }
        VER_PLATFORM_WIN32_WINDOWS:
          if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 0) then
          begin
            Result := Result+'Windows 95 ';
            if (Info.szCSDVersion[1] in ['B', 'C']) then
              Result := Result +' OSR2';
          end
          else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 10) then
          begin
            Result := Result+'Windows 98 ';
            if (Info.szCSDVersion[1] = 'A') then
              Result := Result + ' SE';
          end
          else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 90) then
            Result := Result+'Windows Millennium Edition ';
        { Windows NT }
        VER_PLATFORM_WIN32_NT:
          begin
            { Version }
            if Info.dwMajorVersion=6 then  begin
              if Info.dwMinorVersion=0 then begin
              if Info.wProductType= VER_NT_WORKSTATION then
              Result:=Result+'Vista ' else Result:=Result+'Server 2008 ';
              end else
              if Info.dwMinorVersion= 1 then Result:=Result+'7 ';
            end else
            if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then
              Result := Result+'Windows Server 2003 '
            else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 1) then
              Result := Result+'Windows XP '
            else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0) then
              Result := Result+'Windows 2000 '
            else
              Result := Result+'Windows NT ';
            { Extended }
            if (Info.dwOSVersionInfoSize >= SizeOf(TOSVersionInfoEx)) then
            begin
              { ProductType }
              if (Info.wProductType = VER_NT_WORKSTATION) then
              begin
                if (Info.dwMajorVersion = 4) then
                  Result := Result + #10'Workstation 4.0 '
                else if(Info.wSuiteMask and VER_SUITE_PERSONAL <> 0) then
                  Result := Result + #10'Home Edition '
                else
                  Result := Result + #10'Professional ';
              end
              else if (Info.wProductType = VER_NT_SERVER) then
              begin
                 if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then
                 begin
                   if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
                     Result := Result + #10'Datacenter Edition'
                   else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                     Result := Result + #10'Enterprise Edition'
                   else if (Info.wSuiteMask = VER_SUITE_BLADE) then
                     Result := Result + #10'Web Edition'
                   else
                     Result := Result + #10'Standard Edition';
                 end
                 else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0) then
                 begin
                   if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
                      Result := Result + #10'Datacenter Server'
                   else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                      Result := Result + #10'Advanced Server'
                   else
                      Result := Result + #10'Server';
                 end
                 else
                 begin
                   Result := Result + #10'Server ' +
                     IntToStr(Info.dwMajorVersion) + '.' +
                     IntToStr(Info.dwMinorVersion);
                   if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                     Result := Result + ', Enterprise Edition';
                 end;
              end;
            end;
            { CSDVersion }
            if (Info.dwMajorVersion = 4) and
              (StrIComp(Info.szCSDVersion, 'Service Pack 6') = 0) and  (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                                                       'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\Q246009', 0,
                                                                        KEY_QUERY_VALUE, Key) = ERROR_SUCCESS) then
            begin
              Result := Result + #10'Service Pack 6a';
              RegCloseKey(Key);
            end
            else
              Result := Result + #10 + StrPas(Info.szCSDVersion);
            Result := Result + #10'(Build ' +
              IntToStr(Info.dwBuildNumber and $FFFF) + ')';
          end;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    edit1.Text:= GetOSVersionText;
    end;