代码之家  ›  专栏  ›  技术社区  ›  Jeff

确定O/S是否为Windows 7

  •  9
  • Jeff  · 技术社区  · 15 年前

    在项目中工作,需要能够确定O/S是Windows7、Vista还是默认的XP。我知道我可能会遇到win2k和更早的版本,但我们可以说这不是一个问题,因为其他代码在达到这一点之前会捕捉到这一点。我的应用程序将在C++中使用VS2005。我找到了相似的文章和示例代码,但它们对于我的使用来说似乎过于冗长了。只是想找一个又快又脏的回报。

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

    4 回复  |  直到 15 年前
        1
  •  19
  •   Paulo Santos    15 年前

    名单 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
    
        2
  •  18
  •   ChrisV    15 年前

    一般来说,您不希望针对特定的版本号进行测试,而是检查特定的特性。如果你真的想检测“Windows7或更高版本”,但是…

    #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
  •  4
  •   IInspectable    9 年前

    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版本生成应用程序。
        4
  •  3
  •   Joey Gumbo    15 年前

    一般来说,你可以使用 GetVersionEx 查找Windows版本。更安全的方法可能是使用 VerifyVersionInfo . 两者都有C示例 GetVersionEx VerifyVersionInfo .

    但是,正如在msdn上反复指出的那样 checking for the operating system version is usually not the best way of determining whether a particular feature is present .