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版本的更多相关文章

  1. delphi 判断WIN8 , WIN8.1 , WIN10 系统版本

    今天测试了WIN8, WIN8.1, WIN10 系统下GetVersionEx 函数,居然取出来的版本都是6.2 . 于是网上查找各种获取内核版本号的方法, 终于找到几种有用的方法, 记录下来以作备 ...

  2. Win8/Win8.1都有哪些版本?我该选择哪个?(二)

    Windows版本分类比较复杂,下文主要为大家理清Win8/Win8.1的版本种类.如果想了解更多,可以结合<Win7/Win8/Win8.1众多版本,我该选择哪个?>一文来了解. 细数W ...

  3. 在线激活win10、win8/8.1和office2019、2016、2013等的kms激活工具

    在线激活win10.win8/8.1和office2019.2016.2013等的kms激活工具 MicroKMS神龙版能激活win10.win8/8.1.win7以及server2008/2012/ ...

  4. Win7/Win8/Win8.1/Win10下的DragEnter DragDrop事件不触发

    Win7/Win8/Win8.1/Win10下的DragDrop事件不触发 2011-02-02  来自:博客园  字体大小:[大 中 小] 摘要:你的应用程序需要从windows资源管理器拖动文件到 ...

  5. Win7/Win8/Win8.1众多版本,我该选择哪个?

    当你要下载Win7或者Win8/8.1镜像时,是不是被Windows版本种类给吓着了?到底该选择哪种版本的?其实,大多数人用的就那一两个版本,这也是推荐选择的版本,请看快速通道.如果你想了解的更多一点 ...

  6. 详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别)

    详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别) 本文转自“吾乐吧软件站”,原文链接:http://www.wuleba.com/?p=23082 最近,吾乐吧软 ...

  7. 【转】不用软件,解压Win8/Win8.1的install.wim文件

    今天用好压解压Windows 8.1的install.wim文件,居然提示文件损坏,换了7Z仍然如此:其实文件是好的.只不过这些软件暂时不支持罢了,还好可以用dism命令来手动完成. 一.检查镜像版本 ...

  8. windows phone 获取手机图片库中图片(4)

    原文:windows phone 获取手机图片库中图片(4) 前置条件:手机和电脑未连接或连接电脑Zune软件关闭(与Zune软件连接时不允许访问图片库): 版本7.1 获取手机图片库图片的两种方式: ...

  9. 【转】Windows下安装python2和python3双版本

    [转]Windows下安装python2和python3双版本 现在大家常用的桌面操作系统有:Windows.Mac OS.ubuntu,其中Mac OS 和 ubuntu上都会自带python.这里 ...

随机推荐

  1. 浅析StackTrace【转】

    我们在学习函数调用时,都知道每个函数都拥有自己的栈空间.一个函数被调用时,就创建一个新的栈空间.那么通过函数的嵌套调用最后就形成了一个函数调用堆栈.在c#中,使用StackTrace记录这个堆栈.你可 ...

  2. activity-alias的使用

    activity-alias是android里为了反复使用Activity而设计的. 当在Activity的onCreate()方法里,运行getIntent().getComponent().get ...

  3. mysql插入大量数据

    创建实验表: CREATE TABLE `a` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(50)  NOT NULL, `type` ch ...

  4. NVelocity模板引擎学习笔记

    NVelocity模板引擎学习笔记 学习模板引擎有一段时间现在做一些总结

  5. 关于UIScrollView属性跟方法的总结

    iOS中UIScollView的总结 在iOS开发中可以说UIScollView是所有滑动类视图的基础,包括UITableView,UIWebView,UICollectionView等等,UIScr ...

  6. C语言的ELF文件格式学习

    最近的lab里面有ELF文件相关的,所以成这个几乎,学点ELF的东西. ELF,是一种文件格式.暂时,只看可执行文件的ELF文件格式. 首先,给出文件的格式的布局图: 光看这个很难理解,所以写一个小的 ...

  7. socket 通信之select

    对于socket 通信,大家很多都用的单线程通信.同时只能监听一个端口,只能响应一个服务,select的方式可以解决多个socket 被连接的问题.一次可以分配多个资源,只要一个连接便可以进行通信.在 ...

  8. mysql导出命令

    数据库备份 /data/mysql/bin/mysqldump -hlocalhost -u'root' -p'do' my_db --single-transaction -q | gzip > ...

  9. struts2中的方法过滤拦截器

    方法过滤拦截器是只过滤指定的方法,如果使用针对action 的普通的过滤器则会过滤该action内部 所有方法.如果在一个action中同时有多个作为业务逻辑控制的方法存在 的话则会过滤所有的业务逻辑 ...

  10. 在Google map图上做标记,并把标记相连接

    <!DOCTYPE html> <html> <head> <title>GeoLocation</title> <meta name ...