判断操作系统版本

devtools/2024/9/25 21:22:32/
操作系统版本号
windows 1010.0
windows Server 201610.0
windows 8.16.3
windows Server 2012 R26.3
windows 86.2
windows Server 20126.2
windows 76.1
windows Server 2008 R26.1
windows Server 20086.0
windows Vista6.0
windows Server 2003 R25.2
windows XP 64-bit Edition5.2
windows XP5.1
windows 20005.0

通过系统Windows的API中GetVersionEx这个函数获取win8.1下的版本
win8.1以上的版本用GetVersionEx将获取不了,要用别的方法.

std::string vname;
//先判断是否为win8.1或win10
typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);
HINSTANCE hinst = LoadLibrary("ntdll.dll");
DWORD dwMajor, dwMinor, dwBuildNumber;
NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers"); 
proc(&dwMajor, &dwMinor, &dwBuildNumber); 
if (dwMajor == 6 && dwMinor == 3)	//win 8.1
{vname = "Microsoft Windows 8.1";printf_s("此电脑的版本为:%s\n", vname.c_str());return;
}
if (dwMajor == 10 && dwMinor == 0)	//win 10
{vname = "Microsoft Windows 10";printf_s("此电脑的版本为:%s\n", vname.c_str());return;
}
//判断win8.1以下的版本
SYSTEM_INFO info;                //用SYSTEM_INFO结构判断64位AMD处理器  
GetSystemInfo(&info);            //调用GetSystemInfo函数填充结构  
OSVERSIONINFOEX os;
os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
#pragma warning(disable:4996)
if (GetVersionEx((OSVERSIONINFO *)&os))
{//下面根据版本信息判断操作系统名称  switch (os.dwMajorVersion){                        //判断主版本号  case 4:switch (os.dwMinorVersion){                //判断次版本号  case 0:if (os.dwPlatformId == VER_PLATFORM_WIN32_NT)vname ="Microsoft Windows NT 4.0";  //1996年7月发布  else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)vname = "Microsoft Windows 95";break;case 10:vname ="Microsoft Windows 98";break;case 90:vname = "Microsoft Windows Me";break;}break;case 5:switch (os.dwMinorVersion){               //再比较dwMinorVersion的值  case 0:vname = "Microsoft Windows 2000";    //1999年12月发布  break;case 1:vname = "Microsoft Windows XP";      //2001年8月发布  break;case 2:if (os.wProductType == VER_NT_WORKSTATION &&info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)vname = "Microsoft Windows XP Professional x64 Edition";else if (GetSystemMetrics(SM_SERVERR2) == 0)vname = "Microsoft Windows Server 2003";   //2003年3月发布  else if (GetSystemMetrics(SM_SERVERR2) != 0)vname = "Microsoft Windows Server 2003 R2";break;}break;case 6:switch (os.dwMinorVersion){case 0:if (os.wProductType == VER_NT_WORKSTATION)vname = "Microsoft Windows Vista";elsevname = "Microsoft Windows Server 2008";   //服务器版本  break;case 1:if (os.wProductType == VER_NT_WORKSTATION)vname = "Microsoft Windows 7";elsevname = "Microsoft Windows Server 2008 R2";break;case 2:if (os.wProductType == VER_NT_WORKSTATION)vname = "Microsoft Windows 8";elsevname = "Microsoft Windows Server 2012";break;}break;default:vname = "未知操作系统";}printf_s("此电脑的版本为:%s\n", vname.c_str());
}
elseprintf_s("版本获取失败\n");

http://www.ppmy.cn/devtools/37148.html

相关文章

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境: MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量,通过减少或消除背景噪声,使得语音更清晰,便于听者理解或进一步的语音处理任务,如语音识别和语音通讯。在许多实际应用中,如…

8.k8s中网络资源service

目录 一、service资源概述 二、service资源类型 1.ClusterIP类型 2.service的nodeport类型 3.service的loadbalancer类型(了解即可) 4.service的externalname类型(了解即可) 三、nodeport的端口范围设置和svc的endpoint列表 1.修…

Stm32CubeMX 为 stm32mp135d 添加 spi

Stm32CubeMX 为 stm32mp135d 添加 spi 一、启用设备1. spi 设备添加2. spi 引脚配置2. spi 时钟配置 二、 生成代码1. optee 配置 spi 时钟和安全验证2. linux spi 设备 dts 配置 bringup 可参考:Stm32CubeMX 生成设备树 一、启用设备 1. spi 设备添加 选中spi设…

vue跟jQuery中的事件冒泡、事件捕获、事件委托(事件代理)

1、事件捕获、事件冒泡 在JS中,我们管事件发生的顺序叫“事件流” 标准的事件流:当dom触发了事件后,会先通过事件传播捕获到目标元素,然后目标节点通过事件传播实现事件冒泡 事件传播:无论是捕获还是冒泡&#xff0…

《Python编程从入门到实践》day21

# 昨日知识点回顾 设置背景颜色 在屏幕中央绘制飞船 # 今日知识点学习 12.5 重构:方法_check_events()和_update_screen() 12.5.1 方法_check_events() import sys import pygame from Settings import Settings from Ship import Shipclass AlienInvasion:"…

Docker镜像的创建和Dockerfile

一. Docker 镜像的创建: 1.基于现有镜像创建: (1)首先启动一个镜像,在容器里做修改docker run -it --name web3 centos:7 /bin/bash #启动容器​yum install -y epel-release #安装epel源yum install -y nginx #安…

代码随想录day60 | 动态规划P17 | ● 647. ● 516.● 动态规划总结篇

今天 结束动态规划章节 正好是60天 fighting 647. 回文子串 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的…

【spark(零)】spark技术概览

文章目录 一. Spark入门二. Spark RDD与 Spark core三. Spark SQL四. Spark Streaming五. Spark内核原理 一. Spark入门 Spark基础知识 Spark部署模式、 Spark运行流程 【概述】spark(一):spark特点、知识范畴、spark架构、任务提交流程、支持哪些运行…