获得Windows的版本信息

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

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

【 tulaoshi.com - 编程语言 】

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

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

  

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

  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;

  

  测试

(本文来源于图老师网站,更多请访问http://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


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

延伸阅读
标签: 电脑入门
在Windows XP中,打开命令行提示符,然后输入:systeminfo,回车后会看到一份很详细的资料,里面不仅仅有系统运行时间,还有包括系统安装时间、版本、硬件信息、区域甚至输入法等,十分全!而使用命令:systeminfo aaa.txt 可以把结果输出到文本aaa.txt里面。
标签: 电脑入门
图示:Win8界面右上角的通知对话框 首先我们打开Windows 8的控制面板,选择轻松使用。 图示:在Windows 8控制面板中选择轻松使用 在Win8轻松使用窗口中选择轻松使用设置中心。 图示:选择轻松使用设置中心 在Win8的轻松使用设置中心里,我们可以看到放大镜、启用讲述人、启用屏幕键盘,设置高对比度等功能,向下拉动滚动条,选择...
标签: 服务器
在Linux系统中检查glibc版本信息的方法   GNU C库(glibc)是标准C库的GNU实现。glibc是GNU工具链的关键组件,用于和二进制工具和编译器一起使用,为目标架构生成用户空间应用程序。 当从源码进行构建时,一些Linux程序可能需要链接到某个特定版本的glibc。在这种情况下,你可能想要检查已安装的glibc信息以查看是否满足依赖关系...
标签: 电脑入门
Directx是微软创建的多媒体编程接口,在最新的Windows10系统中,据说嵌入了Directx12版本,有些用户比较好奇,真的是Directx12吗?不确定的用户可以按照下面的方法进行查看。 Windows10查看Directx版本的方法: 一、在Win10桌面界面下,首先使用键盘上的+ 组合快捷键打开运行对话框,然后在打开后面输入命令,之后按回车键或者点击底部的打...
标签: 电脑入门
Windows RT 当前提供以下语言版本: 英语(美国) 英语(英国) 阿拉伯语 简体中文 繁体中文(香港) 繁体中文(台湾) 荷兰语 法语 德语 希伯来语 意大利语 日语 朝鲜语 葡萄牙语(巴西) 俄语 西班牙语

经验教程

133

收藏

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