From 18db61d56862e15aa700d6826b9cd2e102ea5e9d Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Mon, 22 Oct 2018 15:13:10 +0200 Subject: [PATCH] Fix MSW wxCheckOsVersion() without manifest Reimplement wxCheckOsVersion() to use wxGetOsVersion() on windows. An executable without the Windows 8.1+ compatibility info in a manifest would not detect the version based on the VerifyVersionInfo() API previously used. Closes https://github.com/wxWidgets/wxWidgets/pull/992 --- src/msw/utils.cpp | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/msw/utils.cpp b/src/msw/utils.cpp index 90708c2b04..2fc500a202 100644 --- a/src/msw/utils.cpp +++ b/src/msw/utils.cpp @@ -1225,24 +1225,12 @@ wxOperatingSystemId wxGetOsVersion(int *verMaj, int *verMin, int *verMicro) bool wxCheckOsVersion(int majorVsn, int minorVsn, int microVsn) { - OSVERSIONINFOEX osvi; - wxZeroMemory(osvi); - osvi.dwOSVersionInfoSize = sizeof(osvi); + int majorCur, minorCur, microCur; + wxGetOsVersion(&majorCur, &minorCur, µCur); - DWORDLONG const dwlConditionMask = - ::VerSetConditionMask( - ::VerSetConditionMask( - ::VerSetConditionMask( - 0, VER_MAJORVERSION, VER_GREATER_EQUAL), - VER_MINORVERSION, VER_GREATER_EQUAL), - VER_BUILDNUMBER, VER_GREATER_EQUAL); - - osvi.dwMajorVersion = majorVsn; - osvi.dwMinorVersion = minorVsn; - osvi.dwBuildNumber = microVsn; - - return ::VerifyVersionInfo(&osvi, - VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER, dwlConditionMask) != FALSE; + return majorCur > majorVsn + || (majorCur == majorVsn && minorCur > minorVsn) + || (majorCur == majorVsn && minorCur == minorVsn && microCur >= microVsn); } wxWinVersion wxGetWinVersion()