在项目上工作,需要能够确定操作系统是Windows 7,Vista还是默认为XP。我知道我可以运行在Win2K和更早的版本中,但让我们说这不是一个问题,因为其他代码在它到达这一点之前就会捕获它。我的应用程序暂时使用VS2005。我发现文章和示例代码相似,但他们似乎臃肿的我的用途。只是寻找一个快速和肮脏的回报。确定操作系统是否为Windows 7
http://msdn.microsoft.com/en-us/library/ms724358%28VS.85%29.aspx
在项目上工作,需要能够确定操作系统是Windows 7,Vista还是默认为XP。我知道我可以运行在Win2K和更早的版本中,但让我们说这不是一个问题,因为其他代码在它到达这一点之前就会捕获它。我的应用程序暂时使用VS2005。我发现文章和示例代码相似,但他们似乎臃肿的我的用途。只是寻找一个快速和肮脏的回报。确定操作系统是否为Windows 7
http://msdn.microsoft.com/en-us/library/ms724358%28VS.85%29.aspx
的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
一般情况下,你可以使用GetVersionEx
找到Windows版本。更安全的方法可能是使用VerifyVersionInfo
。有GetVersionEx
和VerifyVersionInfo
的C示例。
但是,正如MSDN checking for the operating system version is usually not the best way of determining whether a particular feature is present上重复说明的那样。
一般情况下,你不希望被测试针对特定版本号,而是检查特定的功能。如果您确实想要检测“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
在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。
不幸的是,这并没有区分最近的Workstation和Server平台。请参阅:http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=10476 – 2013-03-07 15:29:05
另请参阅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