识别操作系统版本

07年7月份的时候在项目中做了一份操作系统识别的功能。当时是为了针对不同的操作系统实现不同的流程。今天,同样又有这个需求了。但由于,时隔一年有点想不起来了,于是又翻出来“陈年旧账”查找了一下。

实现功能后,觉得还是把一下常用的方法记录下来吧,方便自己的同时也能方便一下正在搜索该方法的朋友。

首先简单了解一下OSVERSIONINFO结构体。在这个结构体中包含了操作系统的主版本号、副版本号等信息。结构定义如下:

typedef struct _OSVERSIONINFO{  DWORDdwOSVersionInfoSize;

                                 DWORDdwMajorVersion;

                                 DWORDdwMinorVersion;

                                 DWORDdwBuildNumber;

                                 DWORDdwPlatformId;

                                 TCHARszCSDVersion[128];

                                } OSVERSIONINFO;

dwMajorVersion成员是表示操作系统的主版本号,请参考下表。 

Value

Meaning

4

Windows NT 4.0, Windows Me, Windows 98, Windows 95.

5

Windows Server 2003 R2, Windows Server 2003, Windows XP, Windows 2000.

6

Windows VistaWindows Server 2008.

 

 

 

 

 

 

dwMinorVersion 成员是操作系统的副版本号,请参考下表。

Value

Meaning

0

Windows Vista, Windows Server 2008, Windows 2000, Windows NT 4.0, Windows 95.

1

Windows XP.

2

Windows Server 2003 R2, Windows Server 2003, Windows XP Professional x64 Edition.

10

Windows 98.

90

Windows Me.

dwPlatformId 成员是用来识别操作系统,请参考下表。

Value

Meaning

VER_PLATFORM_WIN32_NT2

Windows Vista, Windows Server 2008, Windows Server 2003, Windows XP, Windows 2000, Windows NT.

VER_PLATFORM_WIN32_WINDOWS1

Windows Me, Windows 98, Windows 95.

 

使用上面介绍的这三个成员就可以完成操作系统识别的工作了。

代码:

    OSVERSIONINFO versionInfo;

::ZeroMemory(&versionInfo, sizeof(versionInfo));

versionInfo.dwOSVersionInfoSize = sizeof(versionInfo);

::GetVersionEx(&versionInfo);

使用GetVersionEx()函数来填充这个结构体,这样我们关心的信息就都找到了,剩下的事情只是做简单的判断。

例如:如何判断是Windows XP 系统

BOOL IsWinXp()

{

if(m_dwPlatformId == VER_PLATFORM_WIN32_NT && (m_dwMajorVersion == 5 && m_dwMinorVersion >= 1))

{

return TRUE;

}

return FALSE;

}

本文只是很肤浅的引子,具体的内容请参看MSDN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值