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.这里 ...
随机推荐
- C#中Abstract和Virtual 【转】
http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html 在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在 ...
- C++ STL源代码学习(map,set内部heap篇)
stl_heap.h ///STL中使用的是大顶堆 /// Heap-manipulation functions: push_heap, pop_heap, make_heap, sort_heap ...
- About Quick Packaging and Custom Packaging
About Quick Packaging and Custom Packaging The Enterprise Manager Support Workbench provides two met ...
- css渐变/背景
1.线性渐变(gradient变化) linear-gradient线性渐变指沿着某条直线朝一个方向产生渐变效果. 上图是从黄色渐变到绿色 background:linear-gradient( to ...
- Gradle中文乱码
代码中的中文注释可能会引起Gradle报错 解决办法: 在项目下的build.gradle下添加以下代码即可解决 [java] view plaincopyprint? tasks.withType( ...
- EXT属性
Extjs & Ext.Net 弹出整个浏览器对话框的方法 top.Ext.Msg.alert("值"); top.Ext.Msg.confirm("值" ...
- UVa 202 - Repeating Decimals
给你两个数,问你他们相除是多少,有无限循环就把循环体括号括起来 模拟除法运算 把每一次的被除数记下,当有被除数相同时第一个循环就在他们之间. 要注意50个数之后要省略号...每一次输出之后多打一个回车 ...
- Majority Element,Majority Element II
一:Majority Element Given an array of size n, find the majority element. The majority element is the ...
- mysql表结构设计
允许NULL值的字段,数据库在进行比较操作时,会先判断其是否为NULL,非NULL时才进行值的必对.因此基于效率的考虑,所有字段均不能为空,即全部NOT NULL: 对于变长表,由于记录大小不同,在其 ...
- Android EditText屏蔽默认长按粘贴复制事件
et.setCustomSelectionActionModeCallback(new ActionMode.Callback()); 添加全部的方法即可,不需要任何改动.