GetVersion和GetVersionEx的介绍-程序员宅基地

技术标签: c++  VC  

概述:
DWORD WINAPI GetVersion(void);
返回当前操作系统的版本,如果调用成功,返回值的低位字中包含操作系统的主版本与次版本,高位字节包含有操作系统build号。对于所有平台,低位字包含操作系统的版本号, 低位字的低字节是系统的主版本号,用十六进制表示;低位字的高字节表示系统的次版本号,用十六进制表示,高位字表示系统的bulid号。
示例:
#include <Windows.h>
#include <stdio.h>
 
int main()
{
 
    DWORD dwVerison = 0;
    DWORD dwMajorVersion = 0;
    DWORD dwMinorVersion = 0;
    DWORD dwBuild = 0;
    dwVerison = GetVersion();
    // Get the Windows version 
    dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVerison)));
    dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVerison)));
    // Get the build number.
    if (dwVerison < 0x80000000)
    {
        dwBuild = (DWORD)(HIWORD(dwVerison));
     }
    printf ("Version is %d.%d (%d)\n",
            dwMajorVersion,
            dwMinorVersion,
            dwBuild
            );
    return 0;
}
另外 MS 提供了一个GetVersionEx  函数, 现有的一些应用程序通过对GetVersion函数的返回值(DWORD)解析错了系统版本(低位字高字节的次版本号与低字节主版本号对调了) ,GetVersionEx 函数为了纠正这些错误而开发的。 然后使用函数VerifyVersionInfo ,通过比对当前系统的版本与应用程序所要求的版本,从而消除了深层潜在的错误。
    OSVERSIONINFO osvi;
    ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    // 在调用GerVersionEx函数前须设置OSVERSIONINFO  结构体中的dwOSVersionInfoSize 的值
    GetVersionEx(&osvi);
OSVERSIONINFO结构体信息如下:

typedef struct _OSVERSIONINFO {
  DWORD dwOSVersionInfoSize;//在调用GerVersionEx函数前必须设置该值
  DWORD dwMajorVersion; // 系统主版本号
  DWORD dwMinorVersion; // 系统次版本号
  DWORD dwBuildNumber; // 系统的构建号
  DWORD dwPlatformId; // 标识当前系统支持的套件
  TCHAR szCSDVersion[128];// 其它与系统更多的信息
} OSVERSIONINFO;
同时 GetVersionEx 接收另外一个结构体作为参数:OSVERSIONINFOEX 
typedef struct _OSVERSIONINFOEX {
  DWORD dwOSVersionInfoSize;//在调用GerVersionEx函数前必须设置该值
  DWORD dwMajorVersion;// 系统主版本号
  DWORD dwMinorVersion; // 系统次版本号
  DWORD dwBuildNumber;// 系统的构建号
  DWORD dwPlatformId;// 标识当前系统支持的套件
  TCHAR szCSDVersion[128];// 其它与系统更多的信息
  WORD  wServicePackMajor;// 最新安装的Service pack 主版本号, 如SP3,主版本号为3
  WORD  wServicePackMinor;// 最新安装的Service pack 次版本号,如SP3, 次版本号为0
  WORD  wSuiteMask;// 标识当前系统所可用的suite()
  BYTE  wProductType;// 指出当前系统的产品类型
  BYTE  wReserved;// 没有使用,保留
} OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/thanklife/article/details/108997480

智能推荐

HTML:本地存储的方法详解:_html本地存储-程序员宅基地

文章浏览阅读2.6k次。HTML:本地存储有四种方式。分别为:cookies、Storage 、Web SQL、IndexedDB。其中前端开发最常用的是Storage。下面来讲解一下他们的具体内容和区别;Cookie:构成: 名称 一个唯一确定cookie的名称 值 储存在cookie中的字符串值 域 cookie对于那个域是有效的 路径 指定域中的指定路径 失效时间 cookie何时应该被删除的时间戳 安全标志 指定后,cookie_html本地存储

CSDN日报19228——这4点微不足道的改变,正在带我起飞_csdn博客-程序员宅基地

文章浏览阅读2.8k次。程序人生 | 这4点微不足道的改变,正在带我起飞作者:沉默王二3个月前,我完全不懂什么叫个人品牌。我在CSDN上纯粹是为了写而写,完全不知道文章的作者——“沉默王二”就是我的个人品牌,就是我以后可以靠它生存的金字招牌。我在2015年就成为CSDN的博客专家了,排名达到1107,但竟然籍籍无名,除了七八个出版社的编辑找我写书外,再没有别的资源链接到我——“变现”和我之间隔着一条难以逾越的“..._csdn博客

白色简洁的瑞班克个人博客网站-程序员宅基地

文章浏览阅读101次。链接:http://pan.baidu.com/s/1eSqSY8E密码:yqaf转载于:https://www.cnblogs.com/wordblog/p/6804750.html_白色博客网站

java-poi实现:合并汇总不同ecxel的同名sheet页数据_java 对excel 数据汇总-程序员宅基地

文章浏览阅读705次。java-poi、excel操作_java 对excel 数据汇总

C++ LeetCode 171 EXCEL表列序号_计算excel的列序号c++-程序员宅基地

文章浏览阅读152次。给定一个Excel表格中的列名称,返回其相应的列序号。例如,A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 ...示例 1:输入: “A”输出: 1示例 2:输入: “AB”输出: 28示例 3:输入: “ZY”输出: 701其实就是26进制转10进制class Solution {public: int titleToNumber(string s) { int_计算excel的列序号c++

[Erlang 0052] Erlang otp_src_R15B01 Released_otp_src_r15b01.tar.gz-程序员宅基地

文章浏览阅读729次。Bug fix release : otp_src_R15B01Build date : 2012-04-02This is R15B01, the first maintenance release for the R15B major release.You can find the README file for the release at http_otp_src_r15b01.tar.gz

随便推点

Android WebView 网页使用本地字体_android 字体包给webview使用-程序员宅基地

文章浏览阅读6.5k次,点赞4次,收藏5次。要求在网页里面调用android app中assets目录下的某个字体文件。网页加载通常有两种方式:1、loadDataWithBaseURL2、loadUrl一、loadDataWithBaseURL网页中直接使用file://指定assets文件路径即可示例:font-family: url('file:///android_asset/xxx.TTF')二、loadUr..._android 字体包给webview使用

计算机网络课后作业(3)——数据链路层_6、若数据链路层的发送窗口尺寸wt=4,则在 发送3号帧,并接到2号帧的确认帧后,-程序员宅基地

文章浏览阅读6.1k次,点赞9次,收藏41次。一.单选题(共15题,100.0分)1、若数据链路层的发送窗口尺寸W=4,在发送3号帧、并收到2号帧的确认帧后,发送方还可以连续发送多少个帧?(采用累计确认)A、4B、2C、3D、1答案解析:由于是累计确认,收到2号帧的确认帧,说明2号帧以及之前的帧都被成功接收。可以从第三号帧开始再发4个帧。既然已经发出了一个3号帧并且没收到其确认帧,那就还可以连续发送4-1=3个帧。2、下列关于停-等ARQ协议,正确的描述是?A、仅当当前帧的 ACK 落入 *sent *(发送窗口),发送方发送下一帧B_6、若数据链路层的发送窗口尺寸wt=4,则在 发送3号帧,并接到2号帧的确认帧后,

PHP Laravel基础讲解_php controller 与 blade.php-程序员宅基地

文章浏览阅读786次。laravel目录结构app:laravel项目的核心代码app\Http\Controller.php: 定义控制器bootstrap:app.php:用于框架的启动和自动载入配置cache: 处理缓存config:配置文件database: 数据库public: 定义了项目的入口文件:index.php,localhost:8000,就会访问入口文件,前端静态资源resources: 本地化语言文件routes:路由storage: 要与app文件夹产生联系_php controller 与 blade.php

Java 中的常见错误和可能的错误(转)_exception in thread "thread-3" java.lang.runtimeex-程序员宅基地

文章浏览阅读1.9k次。 0、 需要标识符 a) 不在函数内 1、 非法表达式开始 b) 可能:丢失括号 . 2. no data found a) 可能:setInt(1,100)中,没有100这个值 3. 找不到符号 a) 可能:没导入包 4. 指定了无效URL a) 可能:数据库名或IP错误,即连接出错 5. 类路径没有找到 a) 可能: ClassNotFoundException: oracle.jdbc.dr_exception in thread "thread-3" java.lang.runtimeexception: java.lang.nullpoi

Mysql基础部分(12)---数据的增删改-程序员宅基地

文章浏览阅读198次。以往内容:Mysql基础部分(1)—基础操作指令与语法规范Mysql基础部分(2)—基础查询Mysql基础部分(3)—条件查询Mysql基础部分(4)—排序查询Mysql基础部分(5)—常见函数Mysql基础部分(6)—分组函数Mysql基础部分(7)—分组查询Mysql基础部分(8)—sql99语法Mysql基础部分(9)—子查询Mysql基础部分(10)—分页查询Mysq...

使用matlab绘制世界地图并根据经纬度绘制点位(附m_map的下载与安装说明)_matlab根据经纬度画地图-程序员宅基地

文章浏览阅读6.8w次,点赞74次,收藏410次。使用matlab绘制世界地图有两种方法(自己使用过的,可能有别的我不了解的方法):第一种是worldmap和geoshow;第二种是利用m_map工具箱;下面分别介绍这两种方法。1.worldmap & geoshowworldmap和geoshow是matlab中绘图工具箱的两个绘图函数,直接调用即可。worldmap的语法:worldmap region %r..._matlab根据经纬度画地图