曾经在代码中推断用户的Windows操作系统版本号都是通过GetVersion或GetVersionEx获取版本号号,然后比較。

今天偶然发如今新的Visual Studio提供了新的函数来推断系统版本号,比直接调用API要方便得多。



为了使用新的函数。须要使用SDK 8.1。我用的VS2013。已经自带了。

#include "stdafx.h"
#include <iostream>
#include <windows.h> // VersionHelpers.h 依赖于 windows.h
#include <VersionHelpers.h> // Windows SDK 8.1 才有喔 using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
// 是否大于等于 XP
if (IsWindowsXPOrGreater())
cout << ">= XP" << endl;
else
cout << " < XP" << endl; // 是否大于等于 XP SP1
if (IsWindowsXPSP1OrGreater())
cout << ">= XP SP1" << endl;
else
cout << " < XP SP1" << endl; // 是否大于等于 XP SP2
if (IsWindowsXPSP2OrGreater())
cout << ">= XP SP2" << endl;
else
cout << " < XP SP2" << endl; // 是否大于等于 XP SP3
if (IsWindowsXPSP3OrGreater())
cout << ">= XP SP3" << endl;
else
cout << " < XP SP3" << endl; // 是否大于等于 Vista
if (IsWindowsVistaOrGreater())
cout << ">= Vista" << endl;
else
cout << " < Vista" << endl; // 是否大于等于 Vista SP1
if (IsWindowsVistaSP1OrGreater())
cout << ">= Vista SP1" << endl;
else
cout << " < Vista SP1" << endl; // 是否大于等于 Vista SP2
if (IsWindowsVistaSP1OrGreater())
cout << ">= Vista SP2" << endl;
else
cout << " < Vista SP2" << endl; // 是否大于等于 Win8
if (IsWindows8OrGreater())
cout << ">= Win8" << endl;
else
cout << " < Win8" << endl; // 是否大于等于 Win8.1
if (IsWindows8Point1OrGreater())
cout << ">= Win8.1" << endl;
else
cout << " < Win8.1" << endl; // 是否为server版
if (IsWindowsServer())
cout << "server版" << endl;
else
cout << "非server版" << endl; // 以上的函数都是通过IsWindowsVersionOrGreater实现的
// Windows 2000的版本为5.0,所以我们也能够直接通过版本推断
if (IsWindowsVersionOrGreater(5, 0, 0))
cout << ">= Win 2000" << endl;
else
cout << " < Win 2000" << endl; system("pause");
return 0;
}

Win7 x64 旗舰版执行效果:

另外。假设将平台工具集选择为支持XP的话。就不能用上面的函数了,会提示找不到VersionHelper.h头文件。

推断Windows版本号新方法的更多相关文章

  1. svn下copy项目后定位到新资源库,产生不同版本号的方法

    转载于http://blog.csdn.net/u012990533/article/details/44776465 最近这两天,公司要做国际化的开发,本打算要用struts2内置的i18n拦截器做 ...

  2. Atitit.jquery 版本号新特性attilax总结

    Atitit.jquery 版本号新特性attilax总结 1. Jq1.4 1 2. 1.5 1 3. 1.6 3 4. Jq1.7 3 ⒉提升了事件委派时的性能有了大幅度的提升.尤其是在ie7下: ...

  3. Windows 10新功能

    Windows 10 中面向开发人员的新增功能 Windows 10 及新增的开发人员工具将提供新通用 Windows 平台支持的工具.功能和体验.在 Windows 10 上安装完工具和 SDK后, ...

  4. 超具体Windows版本号编译执行React Native官方实例UIExplorer项目(多图慎入)

    ),React Native技术交流4群(458982758).请不要反复加群! 欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客右側欢迎微信扫描关注订阅号,移动技术干货,精彩文 ...

  5. Windows 10 新特性 -- Bing Maps 3D地图开发入门(一)

    本文主要内容是讲述如何创建基于 Windows Universal App 的Windows 10 3D地图应用,涉及的Windows 10新特性包括 Bing Maps 控件.Compiled da ...

  6. 将dll文件注入到其他进程中的一种新方法

    http://www.45it.com/windowszh/201212/33946.htm http://www.hx95.cn/Article/OS/201212/65095.html 我们知道将 ...

  7. windows关闭端口方法

    windows关闭端口方法 在介绍各种端口的作用前,这里先介绍一下在Windows中如何关闭/打开端口,因为默认的情况下,有很多不安全的或没有什么用的端口是开启的,比如Telnet服务的23端口.FT ...

  8. 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法

    若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...

  9. 【Android】一种提高Android应用进程存活率新方法

    [Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph ...

随机推荐

  1. iOS蓝牙空中升级(固件升级)

    空中升级又叫固件升级,指你手机从服务器下载下来的包或者数据,通过蓝牙传输给你的外设升级固件.如果你能把蓝牙的基础搞懂,其实也并不是很难,我在这里只不过提供一下思路. 空中升级略难的地方在于数据处理和交 ...

  2. [leetcode]Restore IP Addresses @ Python

    原题地址:https://oj.leetcode.com/problems/restore-ip-addresses/ 题意: Given a string containing only digit ...

  3. Edit Distance leetcode java

    题目: Given two words word1 and word2, find the minimum number of steps required to convert word1 to w ...

  4. Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)

    1下载hadoop 2安装3个虚拟机并实现ssh免密码登录 2.1安装3个机器 2.2检查机器名称 2.3修改/etc/hosts文件 2.4 给3个机器生成秘钥文件 2.5 在hserver1上创建 ...

  5. iOS中的时钟动画

    iOS 动画效果非常多,我们在开发中可能会遇到很多动画特效,我们就会用到核心动画框架CoreAnimation,核心动画里面的动画效果有很多,都是在QuartzCore.framework框架里面,今 ...

  6. laravel 5.5 跨域问题解决方案

    一.laravel-Cors 安装 在终端执行安装命令如下: composer require barryvdh/laravel-cors 添加服务提供商 在Laravel配置文件app.php的pr ...

  7. AI-终极算法-神经网络(连结学派)

  8. 简单介绍Ceph分布式存储集群

    在规划Ceph分布式存储集群环境的时候,对硬件的选择很重要,这关乎整个Ceph集群的性能,下面梳理到一些硬件的选择标准,可供参考: 1)CPU选择 Ceph metadata server会动态的重新 ...

  9. wifidog 源码初分析(1)-转

    wifidog 的核心还是依赖于 iptables 防火墙过滤规则来实现的,所以建议对 iptables 有了了解后再去阅读 wifidog 的源码. 在路由器上启动 wifidog 之后,wifid ...

  10. javascript中addEventListener(attachEvent)具体解释

    addEventListener 有三个參数:第一个參数表示事件名称(不含 on,如 "click").第二个參数表示要接收事件处理的函数:第三个參数为 useCapture.样例 ...