推断Windows版本号新方法

曾经在代码中推断用户的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头文件。

时间: 2024-12-06 06:40:14

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

svn下copy项目后定位到新资源库,产生不同版本号的方法&lt;转&gt;

我和项目组的一个同事考虑是要svn创建一个新的分支,然后基于分支进行开发,但后来考虑到英文版本的项目是非分支,而是一个新项目,是不需要最终合并到master上 面的,so...我们现在需要在svn下copy项目后定位到新资源库,从而commit产生不同版本号. 下面介绍下svn下copy项目后定位到新资源库,产生不同版本号的方法: 步骤: 1.先在svn远程资源库中检出中文版本的完整项目A到eclipse的workspace中,检出的项目名称叫B(此时B项目中会存在A项目中的svn版本信息) 2

C#如何获得 WINDOWS 版本号

using System; using System.Runtime.InteropServices; namespace GetWindowsVersion { [ StructLayout( LayoutKind.Sequential )] public class OSVersionInfo { public int OSVersionInfoSize; public int MajorVersion; public int MinorVersion; public int BuildNu

Linux认证用Syslog记录UNIX和Windows日志的方法

Linux认证用Syslog记录UNIX和Windows日志的方法,在网络中安排一台专用的日志服务器来记录系统日志是一个比较理想的方案.本文以FreeBSD下的syslog为例,介绍如何利用freebsd的syslogd来记录来自UNIX和windows的log信息. 在比较大规模的网络应用或者对安全有一定要求的应用中,通常需要对系统的日志进行记录分类并审核,默认情况下,每个系统会在本地硬盘上记录自己的日 志,这样虽然也能有日志记录,但是有很多缺点:首先是管理不便,当服务器数量比较多的时候,登陆

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

http://www.45it.com/windowszh/201212/33946.htm http://www.hx95.cn/Article/OS/201212/65095.html 我们知道将动态连接库注入到其他进程中有很多种方法.最常见的方法是使用钩子函数(Hook),但是这种方法主要有两个缺点:第一如果某个进程没有加载User32.dll,那么Hook DLL将永远也不会被加载.第二Hook DLL加载的时机问题,只有在进程发出User32调用的时候, Hook DLL才有可能被加载

关于PS4以上的一个新方法

关于PS4以上的一个新方法 最近在无意中发现一个PSCmdlet中的新的方法,应该在PS3.0 以上都会有 2.0 由于实在懒得弄个demo所以没验证,估计没有 这里还得提一下 某不给代码就喷的孩子 如果你要喷出门左转 不谢! 由于我是在C# 开发Cmdlet中无意发现 理论上用ps自己也可以 我们先来说说几个常用的方法 Cmdlet.WriteObject(object) 向管道写入对象 事实上我们用这个方法将命令结果抛出 Cmdlet.WriteVerbose(string) 向管道写详细信

将Linux代码移植到Windows的简单方法

将Linux代码移植到Windows的简单方法 一.前言 Linux拥有丰富各种源代码资源,但是大部分代码在Windows平台情况是无法正常编译的.Windows平台根本无法直接利用这些源代码资源.如果想要使用完整的代码,就要做移植工作.因为C/C++ Library的不同和其他的一些原因,移植C/C++代码是一项困难的工作.本文将以一个实际的例子(Tar)来说明如何把Linux代码移植到Windows平台上.移植过程将尽量少修改代码,以便代码的运行逻辑不会发生任何变动.保留绝大部分软件主要功能

(九十二)加速计的使用方法(过期方法+新方法)

在iOS4之前.使用UIAccelermeter获取加速计的数据,这样的方法因为简单,沿用至今. 加速计坐标系如图所看到的.在对应轴向受力时会有数据变化. [过期方法] ①定义UIAccelerometer对象,设置代理,採样间隔,然后系统会自己主动调用代理方法. UIAccelerometer *ac = [UIAccelerometer sharedAccelerometer]; ac.delegate = self; ac.updateInterval = 1 / 30.0; ②然后遵循协

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

本文主要内容是讲述如何创建基于 Windows Universal App 的Windows 10 3D地图应用,涉及的Windows 10新特性包括 Bing Maps 控件.Compiled data bindings (x:Bind),SplitView 和Hamburger. 本文中的示例源代码已在github 上共享( https://github.com/gaoxuesong/navigado ). 获取Bing Maps密钥 在 Universal Windows App 中使用必

微信小号挂机?微信开启网赚新方法!

微信小号挂机?微信开启网赚新方法! 在我们的朋友圈经常看见帮自家孩子投个票.帮某员工投个票!网络上的微信投票的价格2毛,5毛,1元不等.所以网络催生了许多微信投票的团体.最近博主发现一个网站,正是为了这个"大众"的需求,专门做微信投票.刷票.公众号关注的!本文不去抨击这种现象!因为市场经济么,有这种供需的需求.目前微信刷票需要大量的微信号,于是乎就产生了本文介绍的网赚方法. 微信挂机还是有一定的风险的,如果出现封号情况和本博无关.请大家知晓! 网站地址: (微投评选)http://mi