我的目标是在我的代码中检测 Windows 10,它必须跨平台以及跨不同版本的 Windows(至少 7 及更高版本)工作。 Windows 提供了 IsWindows10OrGreater()
来解决这个问题,但是它还有一个问题,这个功能在以前的windows 版本中是不存在的。
您会发现无数关于此的博客和 SO 问题,以及像 this 和 getversion 等函数返回一些不同版本而不是正确版本的明显疯狂。
例如在我的机器上 - 方法 IsWindows10OrGreater()
无法编译(我必须安装 Win10 SDK),并且 IsWindowsVersionOrGreater()
报告 6
作为主要版本。
那么有没有一种理智的多版本方法可以解决这个问题?
原文由 hg_git 发布,翻译遵循 CC BY-SA 4.0 许可协议
检索真实操作系统版本的最直接方法是调用 RtlGetVersion 。这是
GetVersionEx
和VerifyVersionInfo
调用的,但不使用兼容性垫片。您可以使用 DDK(通过 #include 并从内核模式链接到 NtosKrnl.lib,或从用户模式链接到 ntdll.lib),或者使用运行时动态链接,如下面的代码片段所示:
如果您需要其他信息,您可以传递 RTL_OSVERSIONINFOEXW 结构来代替 RTL_OSVERSIONINFOW 结构(正确分配 dwOSVersionInfoSize 成员)。
即使没有附加清单,这也会在 Windows 10 上返回预期结果。
顺便说一句,它被普遍认为是一种更好的解决方案,可以根据可用 功能 而不是操作系统版本提供不同的实现。