[英]Check Windows version
如果計算機上安裝的 Windows 版本是 Windows Vista 及更高版本(Windows 7),我如何檢查 C++?
此線程中的所有答案都指向您使用GetVersion
或GetVersionEx
進行此測試,這是不正確的。 這似乎有效,但風險很大。 Windows 操作系統升級的 appcompat 問題的主要來源來自基於GetVersion
結果的糟糕的編寫測試,以及錯誤的假設或錯誤的比較。
進行此測試的正確方法是使用VerifyVersionInfo
,而不是GetVersion
或GetVersionEx
。
如果您使用的是 VS 2013 編譯器工具集和 Windows 8.1 SDK,則可以使用VersionHelpers.h
並調用IsWindowsVistaOrGreater
。
如果您使用 VS 2013
v120_xp
平台工具集來定位 Windows XP,則您實際上使用的是 Windows 7.1A SDK,因此您需要直接使用VeriyVersionInfo
。
否則,請使用:
bool IsWindowsVistaOrGreater()
{
OSVERSIONINFOEXW osvi = {};
osvi.dwOSVersionInfoSize = sizeof(osvi);
DWORDLONG const dwlConditionMask = VerSetConditionMask(
VerSetConditionMask(
VerSetConditionMask(
0, VER_MAJORVERSION, VER_GREATER_EQUAL),
VER_MINORVERSION, VER_GREATER_EQUAL),
VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
osvi.dwMajorVersion = HIBYTE(_WIN32_WINNT_VISTA);
osvi.dwMinorVersion = LOBYTE(_WIN32_WINNT_VISTA);
osvi.wServicePackMajor = 0;
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;
}
此代碼適用於 Windows 2000 或更高版本,並為您提供可靠的結果。 如果您確實需要在 Windows 98 或 Windows ME 上運行此測試——並且您使用的編譯器工具集足夠老,可以在該平台上實際運行,那么您將執行相同的測試,但使用顯式而不是隱式鏈接。 版本號中有什么?
此外,默認情況下,使用GetVersion
或GetVersionEx
將在 Windows 8.1 和 Windows 10 上獲得錯誤的版本。請參閱Manifest Madness 。
請注意,在 Windows 10 中,
VerifyVersionInfo
也受制於相同的基於清單的行為(即,如果沒有 Windows 10 的 GUID 元素,VVI 就像操作系統版本號是 6.2 而不是 10.0。也就是說,大多數真實世界的測試,如IsWindowsVistaOrGreater
,IsWindows7OrGreater
,IsWindows7SP1OrGreater
,IsWindows8OrGreater
即使沒有清單也能正常工作。只有當您使用IsWindows8Point1OrGreater
或IsWindows10OrGreater
,基於清單的行為才很重要。
另請參閱此堆棧溢出線程。
使用kernel32.dll
定義的GetVersionEx API 函數:
bool IsWindowsVistaOrHigher() {
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
return osvi.dwMajorVersion >= 6;
}
與檢查 Windows NT 版本的其他測試類似:
OSVERSIONINFO vi;
memset (&vi, 0, sizeof vi);
vi .dwOSVersionInfoSize = sizeof vi;
GetVersionEx (&vi);
if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT && vi.dwMajorVersion >= 6)
在 Visual Studio 2013 或更高版本中,您還可以使用新的 Version Helper 函數。
有許多不同的 Windows 版本的方法。 例子:
#include <VersionHelpers.h>
if (!IsWindowsVistaOrGreater())
{
MessageBox(NULL, "You need at least Windows Vista", "Version Not Supported", MB_OK);
}
更多信息在這里
我認為您正在尋找GetVersionEx函數。
此Microsoft 支持頁面為您提供舊版本的詳細信息。
要確定在給定系統上運行的操作系統,需要以下數據:
95 98 ME NT 4 2000 XP PlatformID 1 1 1 2 2 2 Major version 4 4 4 4 5 5 Minor version 0 10 90 0 0 1
您可以實現代碼並在 Vista 和 Windows-7 機器上運行它以檢查返回的值。
要獲取操作系統版本信息,請進行以下調用:
System::OperatingSystem *osInfo = System::Environment::OSVersion;
您可以使用 kernel32.dll 中的 GetVersion() 或 GetVersionEx() 函數。 這兩個功能僅在 Windows 2000 或更高版本上可用。
要閱讀有關此內容的更多信息,請訪問http://msdn.microsoft.com/en-us/library/ms724451%28VS.85%29.aspx 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.