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 WPRFLAG #else /* _WINMAIN_ */ #ifdef WPRFLAG #endif /* _WINMAIN_ */ { #ifdef _WINMAIN_ /* _winminor = (_osver >> 8) & 0x00FF ; |
得到两点重要的信息:
-
VC的确已经帮我们获得了系统版本号,而且解析后分别用_osver、_winminor、_winmajor、_winver这四个unsigned int类型的数据来保存了Windows的测试版本号、Windows的次要版本号、Windows的主要版本号和Windows版本号(major version 和minor version的混合体,实在是不知道怎么命名)。在下次使用的时候无需再调用GetVersion API。
-
无论Windows程序用哪种启动函数开始,程序都会使用这4个变量来存放系统版本信息。
此外,VC为我们初始化的变量还有:
- _environ / _wenviron: 类型 char ** / wchar_t **,每个字符串指向一个环境变量。
- _pgmptr / _wpgmptr: 类型 char * / wchar_t *,运行程序的全路径和名字。