delphi获取windows系统版本信息,大全,准确

很多时候从网上找到的取操作系统版本的代码都不是很准确,有些信息也不全面。为此,在msdn上找到全面的信息整理成代码,共享!

unit WindowsSysVersion;

interface

uses
  windows  ;
{$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;
type
  TWinVer = (WinNone, Win95, Win98, WinMe, Win2000, WinServer2000, WinXp, WinXp64, WinServer2003, WinHomeServer, WinServer2003R2, WinVista, WinServer2008, WinServer2008R2, Win7);

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}
  VER_SUITE_WH_SERVER = $00008000;
{$EXTERNALSYM VER_SUITE_WH_SERVER}
  PROCESSOR_ARCHITECTURE_AMD64 = 9;
{$EXTERNALSYM PROCESSOR_ARCHITECTURE_AMD64}
  SM_SERVERR2 = 89;
{$EXTERNALSYM SM_SERVERR2}
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_DEFINED

//取操作系统信息填充到结构
function GetOSVersionInfo(var Info: TOSVersionInfoEx): Boolean;
//windows系统类型 0表示取不到 1表示非服务器 2表示服务器
function GetWindowsSystemType: integer;
//取windows系统版本信息,主函数
function GetWindowsSystemVersion: Twinver;

implementation

{
                                     OSVersionInfoEx.wProductType 类型说明

代码                                                    值                             说明
---------------------------------------------------------------------------------------------------------------------------------------
VER_NT_DOMAIN_CONTROLLER     0x0000002               装的是个域服务器系统(win2000server,2003server,2008server)
VER_NT_SERVER                            0x0000003                装的是服务器系统(win2000server,2003server,2008server)
VER_NT_WORKSTATION                 0x0000001               非服务器版本(Vista, XP Professional, XP Home Edition, 2000)
}
//取操作系统类型 0未取到或出错 1表示非服务器  2表示服务器

function GetWindowsSystemType: integer;
var
  info: TOSVersionInfoEx;
begin
  result := 0;
  if (GetOSVersionInfo(info) = false) then exit;
  case info.wProductType of
    VER_NT_WORKSTATION:
      begin
        Result := 1; //非服务器
      end;
    VER_NT_SERVER:
      begin
        Result := 2; //服务器版
      end;
    VER_NT_DOMAIN_CONTROLLER:
      begin
        Result := 2; //域服务器
      end;
  end;
end;


//系统                                              版本号                   其它条件
//-------------------------------------------------------------------------------------------------------
//Windows 7                                  6 1                   OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
//Windows Server 2008 R2            6 1                 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
//Windows Server 2008                 6 0                   OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
//Windows Vista                            6 0                        OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
//Windows Server 2003 R2            5 2                   GetSystemMetrics(SM_SERVERR2) != 0
//Windows Home Server                5 2                   OSVERSIONINFOEX.wSuiteMask == VER_SUITE_WH_SERVER
//Windows Server 2003                 5 2                   GetSystemMetrics(SM_SERVERR2) == 0
//Windows XP x64 Edition              5 2                   (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
//Windows XP                                5 1
//Windows 2000                            5 0
//Windows Me                                4.9
//Windows 98                                4.1
//Windows 95                                4.0
//取windows系统版本信息

function GetWindowsSystemVersion: Twinver;
var
  info: TOSVersionInfoEx;
  sysInfo: Tsysteminfo;
begin
  Result := WinNone;
  windows.GetSystemInfo(sysInfo); //系统信息
  try
    if (GetOSVersionInfo(info) = false) then exit;
    case info.dwMajorVersion of //主版本
      4:
        begin
          case info.dwMinorVersion of //次版本
            0: Result := Win95;
            1: Result := Win98;
            9: Result := WinMe;
          end;
        end;
      5: begin
          case info.dwMinorVersion of
            0:
              begin
                if info.wProductType = VER_NT_WORKSTATION then
                  Result := Win2000 else Result := WinServer2000;
              end;
            1: Result := WinXp;
            2:
              begin
                if ((info.wProductType = VER_NT_WORKSTATION) and (sysinfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64)) then //PROCESSOR_ARCHITECTURE_AMD64
                  Result := WinXp64;
                  //SM_SERVERR2
                if GetSystemMetrics(SM_SERVERR2) = 0 then
                  Result := WinServer2003
                else
                  Result := WinServer2003R2;
                if info.wSuiteMask = VER_SUITE_WH_SERVER then
                  Result := WinHomeServer;
              end;
          end;
        end;
      6: begin
          case info.dwMinorVersion of
            0:
              begin
                if info.wProductType = VER_NT_WORKSTATION then
                  Result := WinVista else Result := WinServer2008;
              end;
            1:
              begin
                if info.wProductType = VER_NT_WORKSTATION then
                  Result := Win7 else Result := WinServer2008R2;
              end;
          end;
        end;
    end;
  except
    exit;
  end;
end;

function GetOSVersionInfo(var Info: TOSVersionInfoEx): Boolean;
begin
  FillChar(Info, SizeOf(TOSVersionInfoEx), 0);
  Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx);
  Result := GetVersionEx(TOSVersionInfo(Addr(Info)^));
  if (not Result) then
    Info.dwOSVersionInfoSize := 0;
end;
end.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi获取Windows版本号、描述等信息,可获取到主版本号、次版本号、系统描述、系统平台、构建号等,相关代码如下:   //设置版本信息结构的大小    GetVersionEx(OSVI);    //获取版本信息    is98orlater:=    //判断是否98或以后版本    (osvi.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS) and    ((osvi.dwMajorVersion>4) or    ((osvi.dwMajorVersion=4) and (osvi.dwMinorVersion>0)));   //DOWNLOAD BY HTTP://WWW.CODEFANS.NET    //下面开始显示信息    case OSVI.dwPlatformId of    //根据OSVI.dwPlatformId的数值的不同显示具体的平台描述    VER_PLATFORM_WIN32s:    // Windows 3.1平台    s:='Windows 3.1';    VER_PLATFORM_WIN32_WINDOWS:    // Windows 95/98平台    if(is98orlater) then    //98    s:='Windows 98'    else    //95    s:='Windows 95';    VER_PLATFORM_WIN32_NT:    // Windows NT平台    s:='Windows NT/XP';    end;    Edit1.Text:=s;    Edit2.Text:=IntToStr(OSVI.dwMajorVersion);    Edit3.Text:=IntToStr(OSVI.dwMinorVersion);    case OSVI.dwPlatformId of    //根据平台的不同具体处理OSVI.dwBuildNumber信息    VER_PLATFORM_WIN32_WINDOWS:    // Windows 95/98平台则取OSVI.dwBuildNumber的低位字    Edit4.Text:=IntToStr(LOWORD(OSVI.dwBuildNumber));    VER_PLATFORM_WIN32_NT:    // Windows NT平台则取所有位的值    Edit4.Text:=IntToStr(OSVI.dwBuildNumber);    else    Edit4.Text:='';   // Windows 3.1平台此值位空    end;    Edit5.Text:=OSVI.szCSDVersion;   end;
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值