2010-01-20 97 views
9

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

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

回答

18

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 
+0

不幸的是,这并没有区分最近的Workstation和Server平台。请参阅:http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=10476 – 2013-03-07 15:29:05

+0

另请参阅http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions以获取最新列表。您也可以为Windows的“正常”与“服务器”版本测试osvi.wProductType == VER_NT_WORKSTATION:即6.1是Windows 7(true)或Windows Server 2008 R2(false)。 – ddevienne 2014-10-06 12:26:51

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,分别比较主要和次要5和0。对于XP,比较对5和1对于Vista,6和0

3

在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的所有受支持版本的应用程序。