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& ...
随机推荐
- Java面试题——中级(上)
List和Set比较,各自的子类比较 对比一:Arraylist与LinkedList的比较 1.ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高 ...
- append()/extend()/insert()/remove()/del/pop()/slice列表分片
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88] member.append('字符串')#在列表结尾处增加字符串 memb ...
- html超文本标记语言的由来
万维网上的一个超媒体文档称为一个页面:page,作为一个组织或者个人在万维网上放置开始点的页面称为主页:homepage或者首页,主页中通常有指向其他相关页面或者其他节点的指针,就是通常所说的超链接, ...
- 关于div包裹img,底下多出3px间隙的问题
背景:昨天写过一个div包裹图片的html,已经reset了所有的div,但还是发现img与div底部会有3px的间距,我检查了所有的css,发现并未发现什么问题,结果度娘了一下,发现好多朋友都遇到了 ...
- rocketmq番外篇(一):开发命令行
匠心零度 转载请注明原创出处,谢谢! 说在前面 虽然是以rocketmq引出的开发命令行,但是任何java应用如果需要都可以借鉴引用,也是通用技术. 主题 rocketmq使用例子 Apache Co ...
- 用DotTrace 来分析.NET-Core程序
1. 前言 看园子里面讲dotTrace 的文章不多,最近也有这方面的需要,于是去搜索了一下,.NET 性能分析方面的工具.目的呢,主要是想发现我的代码中,哪些代码占用了最多时间,来进行优化.主要 ...
- [WC 2006]水管局长数据加强版
Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...
- [LOJ 6185]烷基计数
Description 众所周知,大连 24 中是一所神奇的学校,在那里,化竞的同学很多都擅长写代码. 有一天,化学不及格的胡小兔向化竞巨佬晴岚请教化学题: “n 个碳原子的烷基共有多少种同分异构体? ...
- [UOJ 12]猜数
Description
- bzoj 4919: [Lydsy六月月赛]大根堆
Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质: ...