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.这里 ...
随机推荐
- Seeding(dfs)
Seeding Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submi ...
- T-SQL事务
事务 订火车票的时候,下一个订单,这个订单中,包含多个购买信息,要么全部执行,要么全部不执行,合作事务就是来处理这种模型的一种机制. --关键字:transaction 或 tran 简写形式 --开 ...
- L10 数据入站、转发、出站流程
二 写出防火墙规则链之间的顺序也就是入站数据流向.转发数据流向.出站数据流向的过程 入站:PREROUTING→INPUT 数据包到达防火墙,由prerouting处理,判断是否修改地址 路由选择:判 ...
- HDU 1017 - A Mathematical Curiosity
题目简单,格式酸爽.. #include <iostream> using namespace std; int ans,n,m,p; int main() { cin>>p; ...
- Windows中的句柄
(一)句柄 在程序设计中,句柄(handle)是一种特殊的智能指针.当一个应用程序要引用其他系统(如数据库.操作系统)所管理的内存块或对象时,就要使用句柄. 句柄与普通指针的区别在于,指针包含的是引用 ...
- typedef用法总结。
引用贴:http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html 首先#define为预处理,与typedef是完全不同的机制.详 ...
- vim命令杂记
vim 实用命令. . . 命令重复上一次修改动作 >G 增加当前行到文档末尾处的缩进 C 相当于c$,更改当前位置 至 行尾的单词 S 相当于^c , 更改一行 : 重复上次的f命令所查找的字 ...
- Android_CodeWiki_01
记录常用代码片,以备不时之需..wkakak,开始: 1. 精确获取屏幕尺寸(例如:3.5.4.0.5.0寸屏幕) public static double getScreenPhysica ...
- shopncv4 短信接口 提供商 中国短信网
前提是在后台开启手机注册功能:具体是在设置->账号同步->手机短信 里开启. 修改 siteroot\core\framework\libraries\sms.php 修改 sit ...
- HTTP中的URL长度限制(资料整理)
HTTP中的URL长度限制 首先,其实http 1.1 协议中对url的长度是不受限制的,协议原文: The HTTP protocol does not place any a priori l ...