检查Windows版本

如果计算机上安装的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) 

在这个线程中的所有答案指出你使用GetVersionGetVersionEx进行这个测试,这是不正确的 。 它似乎工作,但它是有风险的。 Windows操作系统升级的appcompat问题的主要来源是基于GetVersion结果的错误的测试,错误的假设或错误的比较。

执行此测试的正确方法是使用VerifyVersionInfo ,而不是GetVersionGetVersionEx

如果您使用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上运行这个测试,并且你正在使用一个足够老的编译器工具集来运行在这个平台上,那么你可以做同样的测试,但是使用显式链接而不是隐式链接。 什么是版本号?

此外,使用GetVersionGetVersionEx将默认在Windows 8.1和Windows 10上获得错误的版本 。请参阅清单疯狂 。

请注意,对于Windows 10, VerifyVersionInfo也受到相同的基于清单的行为的支配(即,没有用于Windows 10的GUID元素,VVI的行为就好像操作系统版本号是6.2而不是10.0,也就是说,大多数真实世界的测试,如IsWindowsVistaOrGreaterIsWindows7OrGreaterIsWindows7SP1OrGreaterIsWindows8OrGreater都能正常工作,即使没有清单。只有在使用IsWindows8Point1OrGreaterIsWindows10OrGreater ,基于清单的行为才是重要的。

另请参阅此堆栈溢出线程。

使用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