【问题标题】: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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    【解决方案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 上反复声明的那样。

        【讨论】:

          猜你喜欢
          • 2013-03-28
          • 1970-01-01
          • 2019-07-14
          • 2016-05-03
          • 1970-01-01
          • 2015-10-25
          • 2011-02-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多