API得到Windows版本
API得到Windows版本
/**
* Windows Version
* https://msdn.microsoft.com/en-us/library/windows/desktop/dn481241(v=vs.85).aspx
* In Windows 8.1 and Windows 10, the GetVersion and GetVersionEx functions have been deprecated.
* In Windows 10, the VerifyVersionInfo function has also been deprecated.
* Operating system Version number (Major.Minor)
*
* Windows 10 6.4, 7.x, 10.0
* Windows 8.1 6.3
* Windows 8 6.2
* Windows 7 6.1
* Windows Server 2008 R2 6.1
* Windows Server 2008 6.0
* Windows Vista 6.0
* Windows Server 2003 R2 5.2
* Windows Server 2003 5.2
* Windows XP 5.1
* Windows 2000 5.0
* Windows NT40 4.0
* Windows NT35 3.0
*/
typedef enum OSWindowsVersion {
OS_UNKNOWN = 0,
OS_WINNT35 = 35,
OS_WINNT40 = 40,
OS_WIN2000 = 50,
OS_WINXP = 51,
OS_WIN2003 = 52,
OS_WINXP64 = 52,
OS_Vista = 60,
OS_WIN7 = 61,
OS_WIN8 = 62,
OS_WIN2012 = 62,
OS_WIN8_1 = 63,
OS_WIN10 = 100
} OSWindowsVersion;
OSWindowsVersion GetWindowsVersion();
// Author: cheungmine
// 20161205
BOOL GetNtdllVersion(DWORD *dwMajorVer, DWORD *dwMinorVer, DWORD *dwBuildNum)
{
typedef void (WINAPI *PFN_RTLGETNTVERSIONNUMBERS)(DWORD*, DWORD*, DWORD*);
HMODULE hNtdll = LoadLibrary("ntdll.dll");
if (hNtdll) {
PFN_RTLGETNTVERSIONNUMBERS pfnGetWinVer = (PFN_RTLGETNTVERSIONNUMBERS)
GetProcAddress(hNtdll, "RtlGetNtVersionNumbers");
if (pfnGetWinVer) {
pfnGetWinVer(dwMajorVer, dwMinorVer, dwBuildNum);
FreeLibrary(hNtdll);
return TRUE;
}
FreeLibrary(hNtdll);
}
return FALSE;
}
OSWindowsVersion GetWindowsVersion()
{
DWORD majorVer = 0;
DWORD minorVer = 0;
DWORD buildNum = 0;
BOOL isNtVer = 0;
OSVERSIONINFO info;
OSWindowsVersion osVer = OS_UNKNOWN;
SeZero(&info, sizeof(info));
info.dwOSVersionInfoSize = sizeof(info);
if (GetVersionEx(&info) && info.dwPlatformId == VER_PLATFORM_WIN32_NT) {
switch (info.dwMajorVersion) {
case 3:
osVer = OS_WINNT35;
break;
case 4:
osVer = OS_WINNT40;
break;
case 5:
if (info.dwMinorVersion == 0) {
osVer = OS_WIN2000;
} else if (info.dwMinorVersion == 1) {
osVer = OS_WINXP;
} else if (info.dwMinorVersion >= 2) {
osVer = OS_WIN2003;
}
break;
case 6:
if (info.dwMinorVersion == 0) {
osVer = OS_Vista;
} else if (info.dwMinorVersion == 1) {
osVer = OS_WIN7;
} else if (info.dwMinorVersion == 2) {
// 8 or 8.1 or 10
osVer = OS_WIN8;
if (GetNtdllVersion(&majorVer, &minorVer, &buildNum)) {
if (majorVer == 6) {
if (minorVer == 3) {
osVer = OS_WIN8_1;
} else if (minorVer >= 4) {
osVer = OS_WIN10;
}
} else if (majorVer >= 7) {
osVer = OS_WIN10;
}
}
} else if (info.dwMinorVersion == 3) {
osVer = OS_WIN8_1;
} else if (info.dwMinorVersion >= 4) {
osVer = OS_WIN10;
}
break;
default:
if (info.dwMajorVersion >= 7) {
osVer = OS_WIN10;
}
break;
}
} else if (GetNtdllVersion(&majorVer, &minorVer, &buildNum)) {
// should not run to this!!
switch (majorVer) {
case 3:
osVer = OS_WINNT35;
break;
case 4:
osVer = OS_WINNT40;
break;
case 5:
if (minorVer == 0) {
osVer = OS_WIN2000;
} else if (minorVer == 1) {
osVer = OS_WINXP;
} else if (minorVer >= 2) {
osVer = OS_WIN2003;
}
break;
case 6:
if (minorVer == 0) {
osVer = OS_Vista;
} else if (minorVer == 1) {
osVer = OS_WIN7;
} else if (minorVer == 2) {
osVer = OS_WIN8;
} else if (minorVer == 3) {
osVer = OS_WIN8_1;
} else if (minorVer >= 4) {
osVer = OS_WIN10;
}
break;
default:
if (majorVer >= 7) {
osVer = OS_WIN10;
}
break;
}
}
return osVer;
}
API得到Windows版本的更多相关文章
- 史上最详细Windows版本搭建安装React Native环境配置 转载,比官网的靠谱亲测可用
史上最详细Windows版本搭建安装React Native环境配置 2016/01/29 | React Native技术文章 | Sky丶清| 95条评论 | 33530 views ...
- hiredis的各种windows版本
hiredis的各种windows版本(金庆的专栏 2016.12)hiredis 是内存数据库 redis 的客户端C库, 不支持Windows.hiredis的Windows移植版本有许多:des ...
- 如何下载 Nginx (windows 版本)并且简单的使用
官网地址:http://nginx.org/ 进到官网 我这里下载的是 稳定版的 windows版本. 开始我们的简单测试 步骤一:找到nginx的压缩包,(随意找个地方)解压 步骤二:进入conf文 ...
- 获取windows版本信息的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 个人不建议用 GetVersion 或GetVersionEx 之类的 API 来获取系统版本号.注意微软也说过,这个 ...
- FFmpeg笔记:使用MSVC工具链编译Windows版本静态库、动态库
2019年3月开始,为了将音视频编解码功能集成到Cocos2d-x中,开始接触到FFmpeg: 当时开发环境还在Mac下,编译FFmpeg相比现在用Windows平台要方便的多: 最近,公司内部有个U ...
- 史上最全Windows版本搭建安装React Native环境配置
史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...
- C#更改文件访问权限所有者(适用于各个Windows版本)
前面也提到了,前段时间在做Online Judge系统,在正式上线前有几个比较老的版本,其中第一个版本使用ACL来控制权限以确保安全(但是这个版本完全建立在IIS上,所以这样做是没效果的),遇到了一些 ...
- 怎样快速免费获取Windows版本的ZBrush
ZBrush是一款专业的3D绘制软件及数字雕刻软件,随着3D技术的不断进步,ZBrush也是越来越受到业内欢迎,在世界拥有了众多的粉丝和爱好者.相信很多用户对软件的体验就是从使用的版本开始的,本文就教 ...
- cmd命令行查看windows版本
1.ver命令不显示sp几 C:\>ver Microsoft Windows XP [Version 5.1.2600] C:\> 08: C:\Users\Administrator& ...
随机推荐
- hdu1009 FatMouse' Trade---贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009 题意:一共有n个房子,每个房子里有老鼠喜欢吃的javabeans,但是每个房间里的javabea ...
- scrapy爬取极客学院全部课程
# -*- coding: utf-8 -*- # scrapy爬取极客学院全部课程 import scrapy from pyquery import PyQuery as pq from jike ...
- nginx location的命中过程
1 先判断精准命中,立即返回结果并结束解析过程 2 判断普通命中,如果有多个命中,"记录"下"最长"的命中结果(注意:记录但不结束,最长的为准) 3 继续判断正 ...
- 用 k8s 管理机密信息 - 每天5分钟玩转 Docker 容器技术(155)
应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secret. Secret 会以密文的方式存储 ...
- oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)
结构如下: 说明: 节点IP,主机名的修改步骤来自ORACLE support文档: 如何修改集群的公网信息(包括 VIP) (文档 ID 1674442.1) 实验环境情况如下: 实验 节点名称 数 ...
- kafka知识体系
最近一直在整理kafka相关资料,以构建自己的知识体系. 主要分为五大方面: Kafka设计与原理分析 Kafka配置分析 Kafka运维手册 Kafka编程开发 kafka源码分析
- promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解
* promise承诺 * 解决js中异步编程的问题 * * 异步-同步 * 阻塞-无阻塞 * * 同步和异步的区别? 异步;同步 指的是被请求者 解析:被请求者(该事情的处理者)在处理完事情的时候的 ...
- 深入探索.NET框架内部了解CLR如何创建运行时对象
原文地址:http://msdn.microsoft.com/en-us/magazine/cc163791.aspx 原文发布日期: 9/19/2005 原文已经被 Microsoft 删除了,收集 ...
- 出错信息:Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column 'username'
出错信息: java.sql.SQLException: Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column 'username ...
- [TJOI 2013]单词
Description 题库链接 给出一篇文章的所有单词,询问每个单词出现的次数. 单词总长 \(\leq 10^6\) Solution 算是 \(AC\) 自动机的板子,注意拼成文章的时候要在单词 ...