确定O / S是否为Windows 7

时间:2010-01-20 15:18:06

标签: c++ windows-7 windows-vista windows-xp version

处理项目并需要能够确定操作系统是Windows 7,Vista还是默认为XP。我知道我可能遇到Win2K和早期版本,但我们只是说这不是一个问题,因为其他代码会在它到达这一点之前捕获它。我的应用程序将在C ++中暂时使用VS2005。我发现文章和示例代码相似,但它们似乎对我的用途臃肿。只是寻找快速而肮脏的回报。

http://msdn.microsoft.com/en-us/library/ms724358%28VS.85%29.aspx

4 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:18)

通常,您不希望针对特定版本号进行测试,而是检查特定功能。如果你真的想要检测“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,将major和minor分别与5和0进行比较。对于XP,比较5和1.对于Vista,6和0。

答案 2 :(得分:4)

Windows 8.1 SDK 1)引入了一些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版本构建应用程序。

答案 3 :(得分:3)

通常,您可以使用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上一再声明的那样。