win10c语言源代码,C/C++判断操作系统(Win10,Win8.1WinServer等等)-完整源码及思路

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

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

0818b9ca8b590ca3270a3433284dd417.png

我们可以通过系统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

#include

#include

void getSystemName()

{

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;

}

//下面判断不能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";

else

vname = "Microsoft Windows Server 2008"; //服务器版本

break;

case 1:

if (os.wProductType == VER_NT_WORKSTATION)

vname = "Microsoft Windows 7";

else

vname = "Microsoft Windows Server 2008 R2";

break;

case 2:

if (os.wProductType == VER_NT_WORKSTATION)

vname = "Microsoft Windows 8";

else

vname = "Microsoft Windows Server 2012";

break;

}

break;

default:

vname = "未知操作系统";

}

printf_s("此电脑的版本为:%s\n", vname.c_str());

}

else

printf_s("版本获取失败\n");

}

void main()

{

getSystemName();

system("pause");

}

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

首先是大家关注的win10

0818b9ca8b590ca3270a3433284dd417.png

然后是win server2008R2

0818b9ca8b590ca3270a3433284dd417.png

然后是win7

0818b9ca8b590ca3270a3433284dd417.png

xp系统

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值