如果计算机上安装的Windows版本是Windows Vista或更高版本(Windows 7),如何检查C ++?
与检查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)
在这个线程中的所有答案指出你使用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 = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 }; 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上获得错误的版本 。请参阅清单疯狂 。
请注意,对于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; }
在Visual Studio 2013或更高版本中,您也可以使用新的版本帮助器功能。
有许多不同的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 。