如何使用预处理器指令检查操作系统版本(Windows)?
Posted
技术标签:
【中文标题】如何使用预处理器指令检查操作系统版本(Windows)?【英文标题】:How can I check OS version (Windows) with preprocessor directives? 【发布时间】:2013-07-07 16:35:50 【问题描述】:我想知道是否有机会检查我真正使用的 Windows 版本。类似于:How do I check OS with a preprocessor directive?。
我尝试了 MSDN 中的代码:
-
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724451(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
但是它们中的任何一个都给了我很好的结果(例如:根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx,当我在 Windows XP 上时,我的代码应该打印 5.1 但它显示为 5 ...)
是否有任何可靠的方法(我更喜欢预处理器指令的方法)来找出我正在使用的 Windows?
我的代码:
#include <windows.h>
#include <iostream>
int main()
OSVERSIONINFO osvi;
BOOL bIsWindowsXPorLater;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
// I HAD THIS, AND IT WAS WRONG! :<
std::cout << osvi.dwMajorVersion << "\n";
// CHANGED THE ABOVE LINE TO THE LINE BELOW AND IT IS OK NOW :D
std::cout << osvi.dwMajorVersion << "." << osvi.dwMinorVersion << "\n";
return 0;
【问题讨论】:
使用预处理器指令设置会有点困难。当您需要更新的功能时,您必须告诉标题是有原因的。 @chris: 好的,并且没有预处理器指令 - 有可能吗? 我能说的最好的就是GetVersion
的东西。我不知道你为什么会得到错误的答案。
@mazix 你是如何调用 GetVersionEx 函数的?
你只输出主要版本部分。
【参考方案1】:
您实际上得到了正确的结果。但是您只打印主要版本:
std::cout << osvi.dwMajorVersion << "\n";
尝试使用:
if (osvi.dwMinorVersion >= 1)
std::cout << osvi.dwMajorVersion << "." << osvi.dwMinorVersion << std::endl;
else
std::cout << osvi.dwMajorVersion << std::endl;
【讨论】:
以上是关于如何使用预处理器指令检查操作系统版本(Windows)?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查我的 ifunc 解析器中是不是有 BMI2 指令?