获得Windows的版本信息

2016-02-19 20:46 19 1 收藏

下面图老师小编跟大家分享一个简单易学的获得Windows的版本信息教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

【 tulaoshi.com - 编程语言 】

    最近写控件,因为想加入版本信息,而通常大多数情况下,几乎所有的公司或个人都会在自己软件的版本信息里提及Windows与内存信息。
    参考MSDN的范例,我把它写成个函数了。由于Delphi6不提供OSVERSIONINFOEX结构(我没用过delphi7,8,2005等,不知道是否开始提供这个结构了),所以只好自己定义一个。为了不会受到有的版本里已经提供这个结构的影响,也不影响别的什么地方,直接把它定义到函数内部了。

  

  函数:(2000,XP下测试通过,有其它版本的兄弟可以测试一下,有问题,发消息给我)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  function GetVersionInfo(var SProduct, SVersion, SServicePack :String):BOOL;
  type
    _OSVERSIONINFOEXA = 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;
    _OSVERSIONINFOEXW = record
      dwOSVersionInfoSize: DWORD;
      dwMajorVersion: DWORD;
      dwMinorVersion: DWORD;
      dwBuildNumber: DWORD;
      dwPlatformId: DWORD;
      szCSDVersion: array[0..127] of WideChar;
      wServicePackMajor: WORD;
      wServicePackMinor: WORD;
      wSuiteMask: Word;
      wProductType: Byte;
      wReserved: Byte;
    end;
    { this record only support Windows 4.0 SP6 and latter , Windows 2000 ,XP, 2003 }
    OSVERSIONINFOEXA = _OSVERSIONINFOEXA;
    OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
    OSVERSIONINFOEX = OSVERSIONINFOEXA;
  const
    VER_PLATFORM_WIN32_CE = 3;
    { wProductType defines }
    VER_NT_WORKSTATION        = 1;
    VER_NT_DOMAIN_CONTROLLER  = 2;
    VER_NT_SERVER             = 3;
    { wSuiteMask defines }
    VER_SUITE_SMALLBUSINESS             = $0001;
    VER_SUITE_ENTERPRISE                = $0002;
    VER_SUITE_BACKOFFICE                = $0004;
    VER_SUITE_TERMINAL                  = $0010;
    VER_SUITE_SMALLBUSINESS_RESTRICTED  = $0020;
    VER_SUITE_DATACENTER                = $0080;
    VER_SUITE_PERSONAL                  = $0200;
    VER_SUITE_BLADE                     = $0400;
    VER_SUITE_SECURITY_APPLIANCE        = $1000;
  var
    Info: OSVERSIONINFOEX;
    bEx: BOOL;
  begin
    Result := False;
    FillChar(Info, SizeOf(OSVERSIONINFOEX), 0);
    Info.dwOSVersionInfoSize := SizeOf(OSVERSIONINFOEX);
    bEx := GetVersionEx(POSVERSIONINFO(@Info)^);
    if not bEx then
    begin
      Info.dwOSVersionInfoSize := SizeOf(OSVERSIONINFO);
      if not GetVersionEx(POSVERSIONINFO(@Info)^) then Exit;
    end;
    with Info do
    begin
      SVersion := IntToStr(dwMajorVersion) + '.' + IntToStr(dwMinorVersion)
                                  + '.' + IntToStr(dwBuildNumber and $0000FFFF);
      SProduct := 'Microsoft Windows unknown';
      case Info.dwPlatformId of
        VER_PLATFORM_WIN32s: { Windows 3.1 and earliest }
          SProduct := 'Microsoft Win32s';
        VER_PLATFORM_WIN32_WINDOWS:
          case dwMajorVersion of
            4: { Windows95,98,ME }
              case dwMinorVersion of
                0:
                  if szCSDVersion[1] in ['B', 'C'] then
                  begin
                    SProduct := 'Microsoft Windows 95 OSR2';
                    SVersion := SVersion + szCSDVersion[1];
                  end
                  else
                    SProduct := 'Microsoft Windows 95';
                10:
                  if szCSDVersion[1] = 'A' then
                  begin
                    SProduct := 'Microsoft Windows 98 SE';
                    SVersion := SVersion + szCSDVersion[1];
                  end
                  else
                    SProduct := 'Microsoft Windows  98';
                90:
                  SProduct := 'Microsoft Windows Millennium Edition';
              end;
          end;
        VER_PLATFORM_WIN32_NT:
        begin
          SServicePack := szCSDVersion;
          case dwMajorVersion of
            0..4:
              if bEx then
              begin
                case wProductType of
                  VER_NT_WORKSTATION:
                    SProduct := 'Microsoft Windows NT Workstation 4.0';
                  VER_NT_SERVER:
                    if wSuiteMask and VER_SUITE_ENTERPRISE 0 then
                      SProduct := 'Microsoft Windows NT Advanced Server 4.0'
                    else
                      SProduct := 'Microsoft Windows NT Server 4.0';
                end;
              end
              else  { NT351 and NT4.0 SP5 earliest}
                with TRegistry.Create do
                try
                  RootKey := HKEY_LOCAL_MACHINE;
                  if OpenKey('SYSTEMCurrentControlSetControlProductOptions', False) then
                  begin
                    if ReadString('ProductType') = 'WINNT' then
                      SProduct := 'Microsoft Windows NT Workstation ' + SVersion
                    else if ReadString('ProductType') = 'LANMANNT' then
                      SProduct := 'Microsoft Windows NT Server ' + SVersion
                    else if ReadString('ProductType') = 'LANMANNT' then
                      SProduct := 'Microsoft Windows NT Advanced Server ' + SVersion;
                  end;
                finally
                  Free;
                end;
            5:
              case dwMinorVersion of
                0:  { Windows 2000 }
                  case wProductType of
                    VER_NT_WORKSTATION:
                      SProduct := 'Microsoft Windows 2000 Professional';
                    VER_NT_SERVER:
                      if wSuiteMask and VER_SUITE_DATACENTER 0 then
                        SProduct := 'Microsoft Windows 2000 Datacenter Server'
                      else if wSuiteMask and VER_SUITE_ENTERPRISE 0 then
                        SProduct := 'Microsoft Windows 2000 Advanced Server'
                      else
                        SProduct := 'Microsoft Windows 2000 Server';
                  end;
                1: { Windows XP }
                  if wSuiteMask and VER_SUITE_PERSONAL 0 then
                    SProduct := 'Microsoft Windows Home Edition'
                  else
                    SProduct := 'Microsoft Windows Professional';
                2: { Windows Server 2003 }
                  if wSuiteMask and VER_SUITE_DATACENTER 0 then
                    SProduct := 'Microsoft Windows Server 2003 Datacenter Edition'
                  else if wSuiteMask and VER_SUITE_ENTERPRISE 0 then
                    SProduct := 'Microsoft Windows Server 2003 Enterprise Edition'
                  else if wSuiteMask and VER_SUITE_BLADE 0 then
                    SProduct := 'Microsoft Windows Server 2003 Web Edition'
                  else
                    SProduct := 'Microsoft Windows Server 2003 Standard Edition';
              end;
          end;
        end;
        VER_PLATFORM_WIN32_CE: { Windows CE }
          SProduct := SProduct + ' CE';
      end;
    end;
    Result := True;
  end;

  

  测试

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  procedure TForm1.Button1Click(Sender: TObject);
  var
    a,b,c :String;
  begin
    GetVersionInfo(a,b,c);
    ShowMessage(a + #10 + b + #10 + c);
  end;

  如果你得到的是'Microsoft Windows unknown',请给我来信,写明你用的系统

  Email: gpg@mail.csdn.net


来源:https://www.tulaoshi.com/n/20160219/1624459.html

延伸阅读
Android获取系统cpu信息,内存,版本,电量等信息 1、CPU频率,CPU信息:/proc/cpuinfo和/proc/stat 通过读取文件/proc/cpuinfo系统CPU的类型等多种信息。 读取/proc/stat 所有CPU活动的信息来计算CPU使用率 下面我们就来讲讲如何通过代码来获取CPU频率: 代码如下: package com.orange.cpu; import java.io.BufferedReader; import jav...
标签: 电脑入门
在Windows XP中,打开命令行提示符,然后输入:systeminfo,回车后会看到一份很详细的资料,里面不仅仅有系统运行时间,还有包括系统安装时间、版本、硬件信息、区域甚至输入法等,十分全!而使用命令:systeminfo aaa.txt 可以把结果输出到文本aaa.txt里面。
标签: windows10
windows10各版本对比   Windows10七大版本区别 Windows 10家庭版 对于大多数购买新PC机的用户来讲,他们最有可能得到的就是Windows 10家庭版,它具备Windows 10的关键功能,包括全新的开始菜单、Edge浏览器、Windows Hello生物特征认证登录以及虚拟语音助理Cortana。 Windows 10家庭版还将会包括游戏串流功能,...
标签: 电脑入门
相比此前的Windows系统,全新的Windows 8有了较大的改变,比如以开始屏幕取代原来的开始菜单,以动态磁贴的方式呈现应用,增加了右边栏的超级按钮用以搜索和个性化设置。已经使用过Win8系统的朋友也会发现,开始屏幕上的动态磁贴,还能够即时显示信息,比如新收到了邮件提醒,联系人信息和微博信息提醒,以及天气预报、新闻资讯等,非常的贴心...
标签: 电脑入门
Windows7包含有多个版本相信很多人都已经知道,在我们实际的使用中,由于获取盗版时的心理因素,很多用户往往选择了最高端的Windows7Ultimate旗舰版,但是,我们要问一问,旗舰版真的适合我们的需求吗?有没有更好的? 上面的问题似乎很奇怪,因为旗舰版时Windows7最高端的版本,毫无疑问是最好的。没有错,不过同时我们还有一句话叫最合适的才...

经验教程

81

收藏

91
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部