windows如何获取Win10 Win8 Win8.1版本
GetVersionEx 在win8 win8.1 win10 之后已经无法使用,如果非要使用的话需要让exe嵌入manifest,mainfest如下。这个文件需要已utf-8存储。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
</assembly>
或者使用高版本windows库函数
这里我使用了其他的函数来获取
typedef LONG (WINAPI *pfnRtlGetVersion)(RTL_OSVERSIONINFOEXW*);
bool MyGetVersionEx(RTL_OSVERSIONINFOEXW &osverinfo)
{
osverinfo.dwOSVersionInfoSize = sizeof(osverinfo);
HMODULE hmodule=LoadLibrary(L"ntdll.dll");
pfnRtlGetVersion Rtl = (pfnRtlGetVersion)GetProcAddress(hmodule,"RtlGetVersion");
if (Rtl)
{
if(!Rtl(&osverinfo))
{
FreeLibrary(hmodule);
return true;
}
else
{
FreeLibrary(hmodule);
return false;
}
}
else
{
FreeLibrary(hmodule);
return false;
}
}
bool GetOSName(string &strOsName,bool &bX86)
{
SYSTEM_INFO info; //用SYSTEM_INFO结构判断64位AMD处理器
GetSystemInfo(&info); //调用GetSystemInfo函数填充结构 RTL_OSVERSIONINFOEXW osInfo= {};
if(MyGetVersionEx(osInfo))
{
char osName[] = "UNKNOWN"; if (GetSystemBits()==)
{
bX86=false;
}
else
{
bX86=true;
}
switch(osInfo.dwPlatformId)
{
case VER_PLATFORM_WIN32_WINDOWS:
{
switch(osInfo.dwMinorVersion)
{
case :
{
strcpy(osName,"Windows 95");
break;
} case :
{
strcpy(osName,"Windows 98");
break;
} case :
{
strcpy(osName,"Windows Me");
break;
}
}
break;
} case VER_PLATFORM_WIN32_NT:
{
switch(osInfo.dwMajorVersion)
{
case :
{
strcpy(osName,"Windows NT 3.51");
break;
} case :
{
strcpy(osName,"Windows NT 4.0");
break;
} case :
{
if(osInfo.dwMinorVersion == )
{
strcpy(osName,"Windows 2000");
}
else if(osInfo.dwMinorVersion == )
{
if(osInfo.wSuiteMask & VER_SUITE_EMBEDDEDNT)
{
strcpy(osName,"Windows XP Embedded");
}
else
{
strcpy(osName,"Windows XP");
}
}
else if(osInfo.dwMinorVersion == )
{
if(osInfo.wProductType==VER_NT_WORKSTATION && info.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
{
strcpy(osName,"Windows XP Pro x64 Edition");
}
else if( GetSystemMetrics(SM_SERVERR2) == )
{
strcpy(osName,"Windows Server 2003");
}
else if( GetSystemMetrics(SM_SERVERR2) != )
{
strcpy(osName,"Windows Server 2003 R2");
} }
break;
} case :
{
//printf("%d %d \n",6,osInfo.dwMinorVersion);
if(osInfo.dwMinorVersion == )
{
if( osInfo.wProductType == VER_NT_WORKSTATION )
{
strcpy(osName,"Windows Vista");
}
else
{
strcpy(osName,"Windows Server 2008");
}
}
else if(osInfo.dwMinorVersion == )
{
if( osInfo.wProductType == VER_NT_WORKSTATION )
{
strcpy(osName,"Windows 7");
}
else
{
strcpy(osName,"Windows Server 2008 R2");
}
}
else if (osInfo.dwMinorVersion == )
{
if( osInfo.wProductType == VER_NT_WORKSTATION )
{
strcpy(osName,"Windows 8");
}
else
{
strcpy(osName,"Windows Server 2012 ");
}
}
else if (osInfo.dwMinorVersion == )
{
if( osInfo.wProductType == VER_NT_WORKSTATION )
{
strcpy(osName,"Windows 8.1");
}
else
{
strcpy(osName,"Windows Server 2012 r2");
}
}
break;
} case :
{
if (osInfo.dwMinorVersion ==)
{
if( osInfo.wProductType == VER_NT_WORKSTATION )
{
strcpy(osName,"Windows 10");
}
}
break;
}
}
break;
}
}
string os(osName);
strOsName=os;
return true;
}
else
return false;
}
windows如何获取Win10 Win8 Win8.1版本的更多相关文章
- delphi 判断WIN8 , WIN8.1 , WIN10 系统版本
今天测试了WIN8, WIN8.1, WIN10 系统下GetVersionEx 函数,居然取出来的版本都是6.2 . 于是网上查找各种获取内核版本号的方法, 终于找到几种有用的方法, 记录下来以作备 ...
- Win8/Win8.1都有哪些版本?我该选择哪个?(二)
Windows版本分类比较复杂,下文主要为大家理清Win8/Win8.1的版本种类.如果想了解更多,可以结合<Win7/Win8/Win8.1众多版本,我该选择哪个?>一文来了解. 细数W ...
- 在线激活win10、win8/8.1和office2019、2016、2013等的kms激活工具
在线激活win10.win8/8.1和office2019.2016.2013等的kms激活工具 MicroKMS神龙版能激活win10.win8/8.1.win7以及server2008/2012/ ...
- Win7/Win8/Win8.1/Win10下的DragEnter DragDrop事件不触发
Win7/Win8/Win8.1/Win10下的DragDrop事件不触发 2011-02-02 来自:博客园 字体大小:[大 中 小] 摘要:你的应用程序需要从windows资源管理器拖动文件到 ...
- Win7/Win8/Win8.1众多版本,我该选择哪个?
当你要下载Win7或者Win8/8.1镜像时,是不是被Windows版本种类给吓着了?到底该选择哪种版本的?其实,大多数人用的就那一两个版本,这也是推荐选择的版本,请看快速通道.如果你想了解的更多一点 ...
- 详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别)
详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别) 本文转自“吾乐吧软件站”,原文链接:http://www.wuleba.com/?p=23082 最近,吾乐吧软 ...
- 【转】不用软件,解压Win8/Win8.1的install.wim文件
今天用好压解压Windows 8.1的install.wim文件,居然提示文件损坏,换了7Z仍然如此:其实文件是好的.只不过这些软件暂时不支持罢了,还好可以用dism命令来手动完成. 一.检查镜像版本 ...
- windows phone 获取手机图片库中图片(4)
原文:windows phone 获取手机图片库中图片(4) 前置条件:手机和电脑未连接或连接电脑Zune软件关闭(与Zune软件连接时不允许访问图片库): 版本7.1 获取手机图片库图片的两种方式: ...
- 【转】Windows下安装python2和python3双版本
[转]Windows下安装python2和python3双版本 现在大家常用的桌面操作系统有:Windows.Mac OS.ubuntu,其中Mac OS 和 ubuntu上都会自带python.这里 ...
随机推荐
- PHP高级特性基础
php对象在内存中的区域:php对象名和对象存放的位置是不一样的,这一点和java是一模一样的,所以在php面向对象部分你完全可以套用java的思想去做.对象存放在堆区(heap)而对象名则和其他普通 ...
- HTML注释简介
HTML注释简介 在编写HTML代码时,我们经常要在一些关键代码旁做一下注释,这样做的好处很多,比如:方便理解.方便查找或方便项目组里的其它程序员了解你的代码,而且可以方便以后你对自己代码进行修改 ...
- asp.net实现UNIX 时间戳
//1 将系统时间转换成UNIX时间戳 DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970,1,1 ...
- iOS设计模式解析(五)责任链模式
责任链模式:使多个对象都有机会处理请求,从而避免发送者和接受者之间发生耦合. 应用场景: 有多个对象可以处理请求,而处理程序只有在运行时才能确定 例如: 英雄联盟中伤害计算,伤害类型分为AP.AD.真 ...
- highcharts:根据Y的数值范围,动态改变图形的填充颜色
图形实例: 源代码如下: <!DOCTYPE html><html><head><meta charset="utf-8">&l ...
- 以Ajax的方式访问数据库
一:以Ajax的方式显示数据 我们都知道,如果用Ajax程序去加载一个动态页,则加载的实际上是这个动态页执行完毕后生成的静态HTML代码字符串. 1.以原有的格式显示数据 <?php heade ...
- 【转】基于RSA算法实现软件注册码原理初讨
1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...
- C# 异步Socket
C# 异步Socket (BeginXXXX)服务器代码 前言: 1.最近维护公司的一个旧项目,是Socket通讯的,主要用于接收IPC(客户端)发送上来的抓拍图像,期间要保持通讯,监测数据包并进行处 ...
- 解决js跨域问题
如何解决js跨域问题 Js跨域问题是web开发人员最常碰到的一个问题之一.所谓js跨域问题,是指在一个域下的页面中通过js访问另一个不同域下 的数据对象,出于安全性考 虑,几乎所有浏览器都不允许这种跨 ...
- ListView学习小结
ListView小结 ListView 是Android UI中十分重要的一个组件,在数据的显示上能有着十分灵活的表现,其使用也比较简单,一般包括以下几个要点: 1. 可以通过编写ListActiv ...