在項目上工作,需要能夠確定操作系統是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