Windows 系统版本判断
下面是判断操作系统的代码
- #include <windows.h>
- #include <tchar.h>
- #include <stdio.h>
- #include <strsafe.h>
- #pragma comment(lib, "User32.lib")
- #define BUFSIZE 256
- typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
- typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
- BOOL GetOSDisplayString( LPTSTR pszOS)
- {
- OSVERSIONINFOEX osvi;
- SYSTEM_INFO si;
- PGNSI pGNSI;
- PGPI pGPI;
- BOOL bOsVersionInfoEx;
- DWORD dwType;
- ZeroMemory(&si, sizeof(SYSTEM_INFO));
- ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
- bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi);
- if(bOsVersionInfoEx != NULL ) return 1;
- // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
- pGNSI = (PGNSI) GetProcAddress(
- GetModuleHandle(TEXT("kernel32.dll")),
- "GetNativeSystemInfo");
- if(NULL != pGNSI)
- pGNSI(&si);
- else GetSystemInfo(&si);
- if ( VER_PLATFORM_WIN32_NT==osvi.dwPlatformId &&
- osvi.dwMajorVersion > 4 )
- {
- StringCchCopy(pszOS, BUFSIZE, TEXT("Microsoft "));
- // Test for the specific product.
- if ( osvi.dwMajorVersion == 6 )
- {
- if( osvi.dwMinorVersion == 0 )
- {
- if( osvi.wProductType == VER_NT_WORKSTATION )
- StringCchCat(pszOS, BUFSIZE, TEXT("Windows Vista "));
- else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 " ));
- }
- if ( osvi.dwMinorVersion == 1 )
- {
- if( osvi.wProductType == VER_NT_WORKSTATION )
- StringCchCat(pszOS, BUFSIZE, TEXT("Windows 7 "));
- else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 R2 " ));
- }
- pGPI = (PGPI) GetProcAddress(
- GetModuleHandle(TEXT("kernel32.dll")),
- "GetProductInfo");
- pGPI( osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);
- switch( dwType )
- {
- case PRODUCT_ULTIMATE:
- StringCchCat(pszOS, BUFSIZE, TEXT("Ultimate Edition" ));
- break;
- case PRODUCT_PROFESSIONAL:
- StringCchCat(pszOS, BUFSIZE, TEXT("Professional" ));
- break;
- case PRODUCT_HOME_PREMIUM:
- StringCchCat(pszOS, BUFSIZE, TEXT("Home Premium Edition" ));
- break;
- case PRODUCT_HOME_BASIC:
- StringCchCat(pszOS, BUFSIZE, TEXT("Home Basic Edition" ));
- break;
- case PRODUCT_ENTERPRISE:
- StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition" ));
- break;
- case PRODUCT_BUSINESS:
- StringCchCat(pszOS, BUFSIZE, TEXT("Business Edition" ));
- break;
- case PRODUCT_STARTER:
- StringCchCat(pszOS, BUFSIZE, TEXT("Starter Edition" ));
- break;
- case PRODUCT_CLUSTER_SERVER:
- StringCchCat(pszOS, BUFSIZE, TEXT("Cluster Server Edition" ));
- break;
- case PRODUCT_DATACENTER_SERVER:
- StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition" ));
- break;
- case PRODUCT_DATACENTER_SERVER_CORE:
- StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition (core installation)" ));
- break;
- case PRODUCT_ENTERPRISE_SERVER:
- StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition" ));
- break;
- case PRODUCT_ENTERPRISE_SERVER_CORE:
- StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition (core installation)" ));
- break;
- case PRODUCT_ENTERPRISE_SERVER_IA64:
- StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition for Itanium-based Systems" ));
- break;
- case PRODUCT_SMALLBUSINESS_SERVER:
- StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server" ));
- break;
- case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
- StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server Premium Edition" ));
- break;
- case PRODUCT_STANDARD_SERVER:
- StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition" ));
- break;
- case PRODUCT_STANDARD_SERVER_CORE:
- StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition (core installation)" ));
- break;
- case PRODUCT_WEB_SERVER:
- StringCchCat(pszOS, BUFSIZE, TEXT("Web Server Edition" ));
- break;
- }
- }
- if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
- {
- if( GetSystemMetrics(SM_SERVERR2) )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Server 2003 R2, "));
- else if ( osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Storage Server 2003"));
- else if ( osvi.wSuiteMask & VER_SUITE_WH_SERVER )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Home Server"));
- else if( osvi.wProductType == VER_NT_WORKSTATION &&
- si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
- {
- StringCchCat(pszOS, BUFSIZE, TEXT( "Windows XP Professional x64 Edition"));
- }
- else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2003, "));
- // Test for the server type.
- if ( osvi.wProductType != VER_NT_WORKSTATION )
- {
- if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64 )
- {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Edition for Itanium-based Systems" ));
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise Edition for Itanium-based Systems" ));
- }
- else if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
- {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter x64 Edition" ));
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise x64 Edition" ));
- else StringCchCat(pszOS, BUFSIZE, TEXT( "Standard x64 Edition" ));
- }
- else
- {
- if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Compute Cluster Edition" ));
- else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Edition" ));
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise Edition" ));
- else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Web Edition" ));
- else StringCchCat(pszOS, BUFSIZE, TEXT( "Standard Edition" ));
- }
- }
- }
- if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
- {
- StringCchCat(pszOS, BUFSIZE, TEXT("Windows XP "));
- if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Home Edition" ));
- else StringCchCat(pszOS, BUFSIZE, TEXT( "Professional" ));
- }
- if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
- {
- StringCchCat(pszOS, BUFSIZE, TEXT("Windows 2000 "));
- if ( osvi.wProductType == VER_NT_WORKSTATION )
- {
- StringCchCat(pszOS, BUFSIZE, TEXT( "Professional" ));
- }
- else
- {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Server" ));
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- StringCchCat(pszOS, BUFSIZE, TEXT( "Advanced Server" ));
- else StringCchCat(pszOS, BUFSIZE, TEXT( "Server" ));
- }
- }
- // Include service pack (if any) and build number.
- if( _tcslen(osvi.szCSDVersion) > 0 )
- {
- StringCchCat(pszOS, BUFSIZE, TEXT(" ") );
- StringCchCat(pszOS, BUFSIZE, osvi.szCSDVersion);
- }
- TCHAR buf[80];
- StringCchPrintf( buf, 80, TEXT(" (build %d)"), osvi.dwBuildNumber);
- StringCchCat(pszOS, BUFSIZE, buf);
- if ( osvi.dwMajorVersion >= 6 )
- {
- if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
- StringCchCat(pszOS, BUFSIZE, TEXT( ", 64-bit" ));
- else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
- StringCchCat(pszOS, BUFSIZE, TEXT(", 32-bit"));
- }
- return TRUE;
- }
- else
- {
- printf( "This sample does not support this version of Windows.\n");
- return FALSE;
- }
- }
- int __cdecl _tmain()
- {
- TCHAR szOS[BUFSIZE];
- if( GetOSDisplayString( szOS ) )
- _tprintf( TEXT("\n%s\n"), szOS );
- }
参照:
Operating system Version number dwMajorVersiondwMinorVersion Other
Windows 8 | 6.2 | 6 | 2 | OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION |
Windows Server 2012 | 6.2 | 6 | 2 | OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION |
Windows 7 | 6.1 | 6 | 1 | OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION |
Windows Server 2008 R2 | 6.1 | 6 | 1 | OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION |
Windows Server 2008 | 6.0 | 6 | 0 | OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION |
Windows Vista | 6.0 | 6 | 0 | OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION |
Windows Server 2003 R2 | 5.2 | 5 | 2 | GetSystemMetrics(SM_SERVERR2) != 0 |
Windows Home Server | 5.2 | 5 | 2 | OSVERSIONINFOEX.wSuiteMask & VER_SUITE_WH_SERVER |
Windows Server 2003 | 5.2 | 5 | 2 | GetSystemMetrics(SM_SERVERR2) == 0 |
Windows XP Professional x64 Edition | 5.2 | 5 | 2 | (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) |
Windows XP | 5.1 | 5 | 1 | Not applicable |
Windows 2000 | 5.0 | 5 | 0 | Not applicable |
好了,还有就是要提供出处了:
Windows 系统版本判断相关推荐
- Windows系统版本判断
(本文在引用的原文的基础上,添加了另外两个获取系统版本的方法,见文中内容) 一.前言 本文并不是讨论windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度讨论下Wind ...
- linux下备份windows系统版本,使用BackupPC备份Linux和Windows系统
使用BackupPC备份Linux和Windows系统 版本1.0 作者:Falko Timme 本教程将介绍如何使用BackupPC备份Linux和Windows系统. BackupPC充当服务器, ...
- 如何查看自己电脑的windows系统版本?
需求: 查看自己电脑的windows系统版本 有多种实现路径,最优雅的解决方案如下: 实现步骤: 第一步:打开Windows的 运行:Win +r 注:win键是那个windows图标,没有Win这三 ...
- Windows系统版本判定那些事儿
转自:http://blog.csdn.net/magictong/article/details/40753519 前言 本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有W ...
- sklearn查看版本 windows_解密windows系统版本和版本号,深入了解一组简单数字背后的故事...
版本号是分配给软件程序.文件.固件.设备驱动程序甚至硬件的特定版本的唯一编号或一组编号. 通常,随着程序或驱动程序的更新和全新版本的发布,版本号将会增加. 这意味着通常可以将计算机上安装的软件的版本号 ...
- 切换windows系统版本
以系统管理员身份打开powershell 1(鼠标右键),2 两种方式都可以以管理员身份打开窗口 查看系统是永久激活还是非永久激活 方式一.powershell中输入命令:slmgr /xpr 方式二 ...
- 判断苹果手机系统版本 判断手机浏览器信息
<script type="text/javascript"> /* * 智能机浏览器版本信息: */ var browser={ versions:function( ...
- 比较纯净的Windows系统版本下载网站
1.Windows官网: 网站地址:软件下载https://www.microsoft.com/zh-cn/software-download/ 2.msdn链接: 网站地址:MSDN, 我告诉你 - ...
- C++通过系统版本号获取windows系统版本
主要用到的windowsAPI为GetVersion()函数 代码 #define WIN10_VERSION 1 #define WIN7_VERSION 2//获取当前系统版本 DWORD get ...
最新文章
- 数据库-聚合函数-count-sum
- go基础库之环境变量的获取与设置以及如何使用默认值
- 在Oracle Coherence中分发Spring Bean
- Apollo进阶课程㉔丨Apollo 规划技术详解——Motion Planning Environment
- Android测量图像中物体大小,android – 加载图像后测量ImageView
- 改变人类社会的五位数学大家
- 接口测试工具-Jmeter使用笔记(四:响应断言)
- Qt5中this application has requested the runtime to terminate it in an unusual way 无法运行问题的解决
- GIS应用技巧之数据结构(栅格与矢量)
- 原创:iPad 2第一次开机与激活指南
- V-Appstore 9Apps(Android)
- 【DSP教程】第35章 FIR有限冲击响应滤波器设计
- C++常用函数汇总(持续更新)
- 兼容NSR20F30NXT5G的小体积肖特基二极管
- 搭建PC网校的4大优势
- LINUX -SELL编程
- 硬盘故障提示“已损毁”怎么办?
- YOLO系列论文精读
- 物联网之NB-IoT技术实践开发一(NB-IoT物联网行业解决方案)
- 打印1-100之间所有3的倍数
热门文章
- Response_案例1_路径_相对路径
- linux ctime 时间戳,关于LINUX三种时间戳的详细说明(带实验)
- html时钟翻牌效果,干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)
- JavaScript正则表达式语法与示例
- Javascript设计模式之中介者模式
- 命令行开启windows下的iis信息服务,开启及配置http端口,开启及配置ftp端口
- 菜鸟之路-浅谈设计模式之单例设计模式
- RocketMQ源码解析:Filtersrv
- CS1704问题汇总
- 关于 eclipse 插件JsonEditorPlugin-0.9.4安装与使用