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
This commit is contained in:
Tobias Taschner
2018-10-22 15:13:10 +02:00
committed by Vadim Zeitlin
parent 5d06593ae1
commit 18db61d568

View File

@@ -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, &microCur);
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()