确定操作系统是不是为 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 版本。更安全的方法可能是使用VerifyVersionInfoGetVersionExVerifyVersionInfo 都有 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 7系统中安装ie 11浏览器

如何设置 Windows 窗体标题栏和 UI 使用 Windows 8/10 的平面操作系统主题,而不是 XP/7 纹理外观?

Windows 7 是不是真的支持 SMB 核心协议?

确定 Windows 7 中当前双击速度设置的可编程方式

给定一个线程 id,如何确定它是不是仍在 Windows 上运行

怎么将windows xp 升级为 windows 7