确定操作系统是不是为 Windows 7
Posted
技术标签:
【中文标题】确定操作系统是不是为 Windows 7【英文标题】:Determine if O/S is Windows 7确定操作系统是否为 Windows 7 【发布时间】:2011-01-07 07:50:53 【问题描述】:正在处理一个项目,需要能够确定操作系统是 Windows 7、Vista 还是默认为 XP。我知道我可能会遇到 Win2K 和更早的版本,但我们只是说这不是问题,因为其他代码会在它到达这一点之前捕捉到它。我的应用程序将在 C++ 中暂时使用 VS2005。我找到了类似的文章和示例代码,但它们对于我的用途来说似乎有些臃肿。只是在寻找一个快速而肮脏的回报。
http://msdn.microsoft.com/en-us/library/ms724358%28VS.85%29.aspx
【问题讨论】:
【参考方案1】:Windows Version 的列表,使用 GetVersionEx
:
Version Number Description
6.1 Windows 7 / Windows 2008 R2
6.0 Windows Vista / Windows 2008
5.2 Windows 2003
5.1 Windows XP
5.0 Windows 2000
【讨论】:
不幸的是,这并不能区分最近的工作站和服务器平台。见:codeproject.com/script/Articles/ViewDownloads.aspx?aid=10476 另请参阅en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions 以获取最新列表。您还可以测试 osvi.wProductType == VER_NT_WORKSTATION 的“普通”与“服务器”版本的 Windows:即 6.1 是 Windows 7(真)或 Windows Server 2008 R2(假)。【参考方案2】:一般来说,您不想针对特定版本号进行测试,而是要检查特定功能。但是,如果您确实想检测“Windows 7 或更高版本”...
#include <windows.h>
bool IsWin7OrLater()
DWORD version = GetVersion();
DWORD major = (DWORD) (LOBYTE(LOWORD(version)));
DWORD minor = (DWORD) (HIBYTE(LOWORD(version)));
return (major > 6) || ((major == 6) && (minor >= 1));
对于 2000,将主要和次要分别与 5 和 0 进行比较。对于 XP,比较 5 和 1。对于 Vista,比较 6 和 0。
【讨论】:
【参考方案3】:Windows 8.1 SDK1)引入了一些Version Helper functions,帮助确定应用程序运行的操作系统版本:
#include <VersionHelpers.h>
...
if ( IsWindows7OrGreater() )
// Windows 7 or above
else if ( IsWindowsVistaOrGreater() )
// Windows Vista
else if ( IsWindowsXPOrGreater() )
// Windows XP
else
// Unsupported version of Windows
如果您需要区分Windows的客户端和服务器版本,可以致电IsWindowsServer。
1)Windows 8.1 SDK 可用于为所有受支持的 Windows 版本构建应用程序。
【讨论】:
【参考方案4】:一般情况下,您可以使用GetVersionEx
查找Windows 版本。更安全的方法可能是使用VerifyVersionInfo
。 GetVersionEx
和 VerifyVersionInfo
都有 C 示例。
但是,正如 MSDN checking for the operating system version is usually not the best way of determining whether a particular feature is present 上反复声明的那样。
【讨论】:
以上是关于确定操作系统是不是为 Windows 7的主要内容,如果未能解决你的问题,请参考以下文章
如何设置 Windows 窗体标题栏和 UI 使用 Windows 8/10 的平面操作系统主题,而不是 XP/7 纹理外观?