在判断电脑系统前,我们先要知道版本号,通过函数调用返回的信息,就可以知道是什么系统。

下面这图是官方提供的关于Windows版本对应的号码

我们可以通过系统Windows的API中GetVersionEx这个函数获取win8.1下的版本。

(这里我只稍微解释下,win8.1以上的版本用GetVersionEx将获取不了,要用别的方法,待会将会说明)

因为本人没有winServer2016的系统,所以在下面和代码里面将不会演示获取winServer2016。

用win10为例,该如何获取win10

RtlGetNtVersionNumbers法

typedef void (__stdcall*NTPROC)(DWORD*,DWORD*,DWORD*); 
void GetWinVer() 

 HINSTANCE hinst = LoadLibrary("ntdll.dll"); 
DWORD dwMajor,dwMinor,dwBuildNumber; 
NTPROC proc = (NTPROC)GetProcAddress(hinst,"RtlGetNtVersionNumbers"); proc(&dwMajor,&dwMinor,&dwBuildNumber); 
}

这个方法可以准备分辨出win8.1的6.3系统号。

那么win8.1以下的版本呢?

我们调用GetVersionEx这个函数获取。

下面给出代码,因为有注释,在此就不再说明,逻辑思路如刚刚所说:

#include <Windows.h>
#include <string>
#include <stdio.h>void getSystemName()
{std::string vname;//先判断是否为win8.1或win10typedef 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;}//下面判断不能Win Server,因为本人还未有这种系统的机子,暂时不给出//判断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");
}void main()
{getSystemName();system("pause");
}

下面是几台电脑的运行结果:

首先是大家关注的win10

然后是win server2008R2

然后是win7

xp系统

C/C++判断操作系统(Win10,Win8.1WinServer等等)-完整源码及思路相关推荐

  1. C#:实现判断是否为闰年算法(附完整源码)

    C#:实现判断是否为闰年算法 using System; namespace CheckLeapYear{public class Year{public Year(){}public static

  2. C语言判断树是否为求和树(附完整源码)

    C语言判断树是否为求和树 C语言判断树是否为求和树完整源码(定义,实现,main函数测试) C语言判断树是否为求和树完整源码(定义,实现,main函数测试) #include <iostream ...

  3. JavaScript实现判断整数是否为2的幂isPowerOfTwo算法(附完整源码)

    JavaScript实现判断整数是否为2的幂isPowerOfTwo算法(附完整源码) isPowerOfTwo.js完整源代码 isPowerOfTwo.js完整源代码 /*** @param {n ...

  4. JavaScript实现判断32位的数字是否为正数isPositive算法(附完整源码)

    JavaScript实现判断32位的数字是否为正数isPositive算法(附完整源码) isPositive.js完整源代码 isPositive.js完整源代码 export default fu ...

  5. JavaScript实现判断位是不是偶数isEven算法(附完整源码)

    JavaScript实现判断位是不是偶数isEven算法(附完整源码) isEven.js完整源代码 isEven.js完整源代码 /*** @param {number} number* @retu ...

  6. C语言判断二叉树是否为二叉搜索树(附完整源码)

    C语言判断二叉树是否为二叉搜索树 C语言判断二叉树是否为二叉搜索树完整源码(定义,实现,main函数测试) C语言判断二叉树是否为二叉搜索树完整源码(定义,实现,main函数测试) #include ...

  7. C语言判断是否为happy number快乐数字的算法(附完整源码)

    C语言判断是否为happy number快乐数字的算法 C语言判断是否为happy number快乐数字的算法完整源码(定义,实现,main函数测试) C语言判断是否为happy number快乐数字 ...

  8. c++判断数字是否为3的倍数的算法实现(附完整源码)

    C++判断数字是否为3的倍数的算法实现 C++判断数字是否为3的倍数的算法实现完整源码(定义,实现,main函数测试) C++判断数字是否为3的倍数的算法实现完整源码(定义,实现,main函数测试) ...

  9. c++判断二个数是否为相反的符号算法实现(附完整源码)

    C++判断二个数是否为相反的符号算法实现 C++判断二个数是否为相反的符号算法实现完整源码(定义,实现,main函数测试) C++判断二个数是否为相反的符号算法实现完整源码(定义,实现,main函数测 ...

最新文章

  1. 一道面试题:用多种方法实现两个数的交换
  2. TianyaDL_4thread天涯帖子下载4线程版
  3. Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!(转载学习)
  4. 网站性能优化--CRP
  5. SQL SERVER2000存储过程调试
  6. sql字符串拼接_Mybatis的SqlSession执行sql过程
  7. (分治)分治法 及 题目
  8. webharvest-sample-1
  9. spring-boot-starter-parent 包maven依赖报错
  10. 计算二阶矩阵特征值的技巧
  11. 北邮机试 打牌——破除固化思维,连续与不连续
  12. 成功之路散文连载之笨人论
  13. Windows7旗舰版SP1_64位2018.10(纯净版)
  14. 计算机专业课题 结题报告,计算机结题报告.doc
  15. 通过同花顺股票程序化交易接口的止损方法有哪些?
  16. CSS中常用选择器总结
  17. 抖音数字人主播app
  18. ROS实践3:publisher模板教程
  19. K均值聚类以及matlab实现
  20. Jenkins结合Gitee(码云)自动化部署Springboot项目(比较详细)

热门文章

  1. 程序员|那天下班回家,突然民警叫住我....
  2. 【java】Windows7 下环境变量设置
  3. 首次曝光的计算模型!对标阿里?有没有想过你的中台只是废纸?
  4. 一文读懂数据分析必备思维:框架思维
  5. HONGJIN4 2013
  6. 辣味就直往眼睛的专业o2o资讯
  7. 工作只用jquery,原生js知道就好了
  8. java 1.8 121,CentOS6.8(64位)安装JDK1.8.0_121
  9. python 西门子交换机_python读取交换机
  10. micropython esp32驱动舵机_PCA9685舵机控制板与MicroPython-ESP32-1Z实验室