VC中最简便判断操作系统版本的方法

PomeloWu原作©,转载请指明出处

以前读《Windows核心编程》的笔记,今天翻出来,居然不曾记得……感慨不少啊,理论和实际如何能脱节?再次怀疑中国的教育,再次对自己的学习态度反省!

        如何得到当前系统的版本信息?Windows SDK API: GetVersion/GetVersionEx。

        不过在程序中如果仅仅需要最简单的信息,比如是否Windows XP,Minor Version是多少,就不用再次调用这个API了。呵呵~~我说了“再”是因为VC已经帮我们做过了这件事。先看看《Windows核心编程》中的一段话:

所有的C/C++运行期启动函数的作用基本上都是相同的。它们的差别在于,它们究竟是处理ANSI字符串还是Unicode字符串,以及它们在对C运行期库进行初始化后它们调用哪个进入点函数。Visual C++配有C运行期库的源代码。可以在CRT0.c文件中找到这4个启动函数的代码。

        直接看CRT0.c中有什么样的代码:

/// 前面代码与本文无关
#ifdef _WINMAIN_

#ifdef WPRFLAG
void wWinMainCRTStartup(
#else  /* WPRFLAG */
void WinMainCRTStartup(
#endif  /* WPRFLAG */

#else  /* _WINMAIN_ */

#ifdef WPRFLAG
void wmainCRTStartup(
#else  /* WPRFLAG */
void mainCRTStartup(
#endif  /* WPRFLAG */

#endif  /* _WINMAIN_ */
        void
        )

{
        int mainret;

#ifdef _WINMAIN_
        _TUCHAR *lpszCommandLine;
        STARTUPINFO StartupInfo;
#endif  /* _WINMAIN_ */

        /*
         * Get the full Win32 version
         */
        _osver = GetVersion();

        _winminor = (_osver >> 8) & 0x00FF ;
        _winmajor = _osver & 0x00FF ;
        _winver = (_winmajor << 8) + _winminor;
        _osver = (_osver >> 16) & 0x00FFFF ;
/// 后面的与本文讨论的无关,省略

    得到两点重要的信息:

  1. VC的确已经帮我们获得了系统版本号,而且解析后分别用_osver、_winminor、_winmajor、_winver这四个unsigned int类型的数据来保存了Windows的测试版本号、Windows的次要版本号、Windows的主要版本号和Windows版本号(major version 和minor version的混合体,实在是不知道怎么命名)。在下次使用的时候无需再调用GetVersion API。
  2. 无论Windows程序用哪种启动函数开始,程序都会使用这4个变量来存放系统版本信息。

        此外,VC为我们初始化的变量还有:

  • _environ / _wenviron: 类型 char ** / wchar_t **,每个字符串指向一个环境变量。
  • _pgmptr / _wpgmptr: 类型 char * / wchar_t *,运行程序的全路径和名字。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值