| @@ -133,31 +133,51 @@ static DebugFlagsInitialiser debugFlagsInitialiser; | |||||
| #endif | #endif | ||||
| //============================================================================== | //============================================================================== | ||||
| SystemStats::OperatingSystemType SystemStats::getOperatingSystemType() | |||||
| static bool isWindowsVersionOrLater (SystemStats::OperatingSystemType target) | |||||
| { | { | ||||
| OSVERSIONINFO info; | |||||
| info.dwOSVersionInfoSize = sizeof (info); | |||||
| GetVersionEx (&info); | |||||
| OSVERSIONINFOEX info; | |||||
| zerostruct (info); | |||||
| info.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX); | |||||
| if (info.dwPlatformId == VER_PLATFORM_WIN32_NT) | |||||
| if (target >= SystemStats::WinVista) | |||||
| { | { | ||||
| if (info.dwMajorVersion == 5) | |||||
| return (info.dwMinorVersion == 0) ? Win2000 : WinXP; | |||||
| info.dwMajorVersion = 6; | |||||
| if (info.dwMajorVersion == 6) | |||||
| switch (target) | |||||
| { | { | ||||
| switch (info.dwMinorVersion) | |||||
| { | |||||
| case 0: return WinVista; | |||||
| case 1: return Windows7; | |||||
| case 2: return Windows8; | |||||
| default: | |||||
| jassertfalse; // new version needs to be added here! | |||||
| return Windows8; | |||||
| } | |||||
| case SystemStats::WinVista: info.dwMinorVersion = 0; break; | |||||
| case SystemStats::Windows7: info.dwMinorVersion = 1; break; | |||||
| case SystemStats::Windows8: info.dwMinorVersion = 2; break; | |||||
| default: jassertfalse; break; | |||||
| } | } | ||||
| } | } | ||||
| else | |||||
| { | |||||
| info.dwMajorVersion = 5; | |||||
| info.dwMinorVersion = target >= SystemStats::WinXP ? 1 : 0; | |||||
| } | |||||
| DWORDLONG mask = 0; | |||||
| VER_SET_CONDITION (mask, VER_MAJORVERSION, VER_GREATER_EQUAL); | |||||
| VER_SET_CONDITION (mask, VER_MINORVERSION, VER_GREATER_EQUAL); | |||||
| VER_SET_CONDITION (mask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); | |||||
| VER_SET_CONDITION (mask, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL); | |||||
| return VerifyVersionInfo (&info, | |||||
| VER_MAJORVERSION | VER_MINORVERSION | |||||
| | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, | |||||
| mask) != FALSE; | |||||
| } | |||||
| SystemStats::OperatingSystemType SystemStats::getOperatingSystemType() | |||||
| { | |||||
| const SystemStats::OperatingSystemType types[] | |||||
| = { Windows8, Windows7, WinVista, WinXP, Win2000 }; | |||||
| for (int i = 0; i < numElementsInArray (types); ++i) | |||||
| if (isWindowsVersionOrLater (types[i])) | |||||
| return types[i]; | |||||
| jassertfalse; // need to support whatever new version is running! | jassertfalse; // need to support whatever new version is running! | ||||
| return UnknownOS; | return UnknownOS; | ||||