diff --git a/gfx/common/win32_common.c b/gfx/common/win32_common.c index f987602bfc..544eef679c 100644 --- a/gfx/common/win32_common.c +++ b/gfx/common/win32_common.c @@ -226,7 +226,14 @@ void win32_monitor_get_info(void) current_mon.cbSize = sizeof(MONITORINFOEX); GetMonitorInfo(win32_monitor_last, (LPMONITORINFO)¤t_mon); + +#if _WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0410 + /* Windows 98 and later codepath */ ChangeDisplaySettingsEx(current_mon.szDevice, NULL, NULL, 0, NULL); +#else + /* Windows 95 / NT codepath */ + ChangeDisplaySettings(NULL, 0); +#endif } void win32_monitor_info(void *data, void *hm_data, unsigned *mon_id) @@ -776,8 +783,14 @@ static bool win32_monitor_set_fullscreen( RARCH_LOG("Setting fullscreen to %ux%u @ %uHz on device %s.\n", width, height, refresh, dev_name); +#if _WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0410 + /* Windows 98 and later codepath */ return ChangeDisplaySettingsEx(dev_name, &devmode, NULL, CDS_FULLSCREEN, NULL) == DISP_CHANGE_SUCCESSFUL; +#else + /* Windows 95 / NT codepath */ + return ChangeDisplaySettings(&devmode, CDS_FULLSCREEN); +#endif #endif } @@ -828,7 +841,7 @@ bool win32_suppress_screensaver(void *data, bool enable) if (major*100+minor >= 601) { -#ifdef _WIN32_WINNT_WIN7 +#if _WIN32_WINNT >= 0x0601 /* Windows 7, 8, 10 codepath */ typedef HANDLE (WINAPI * PowerCreateRequestPtr)(REASON_CONTEXT *context); typedef BOOL (WINAPI * PowerSetRequestPtr)(HANDLE PowerRequest, @@ -855,12 +868,20 @@ bool win32_suppress_screensaver(void *data, bool enable) } #endif } - else + else if (major*100+minor >= 410) { - /* XP / Vista codepath */ +#if _WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0410 + /* 98 / 2K / XP / Vista codepath */ SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED); return true; +#endif } + else + { + /* 95 / NT codepath */ + /* No way to block the screensaver. */ + return true; + } } #endif diff --git a/gfx/common/win32_common.h b/gfx/common/win32_common.h index 975eb5caf8..43bef2fc85 100644 --- a/gfx/common/win32_common.h +++ b/gfx/common/win32_common.h @@ -22,6 +22,12 @@ #ifndef _XBOX #define WIN32_LEAN_AND_MEAN #include +#if _WIN32_WINNT <= 0x0400 +/* Windows versions below 98 do not support multiple monitors, so fake it */ +#define COMPILE_MULTIMON_STUBS +#include +#endif + #endif #include diff --git a/pkg/msvc/msvc-2003/RetroArch-msvc2003.vcproj b/pkg/msvc/msvc-2003/RetroArch-msvc2003.vcproj index c0a839e701..dfb5fcd27a 100644 --- a/pkg/msvc/msvc-2003/RetroArch-msvc2003.vcproj +++ b/pkg/msvc/msvc-2003/RetroArch-msvc2003.vcproj @@ -21,7 +21,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories=""$(SolutionDir)\..\..\libretro-common\include";"$(SolutionDir)\..\..\libretro-common\include\compat\msvc";"$(SolutionDir)\..\..\gfx\include"" - PreprocessorDefinitions="_WIN32;RARCH_INTERNAL;HAVE_CC_RESAMPLER;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_RPNG;HAVE_RJPEG;HAVE_RBMP;HAVE_RTGA;HAVE_IMAGEVIEWER;HAVE_XMB;WANT_ZLIB;HAVE_DINPUT;HAVE_DSOUND;HAVE_DYLIB;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;HAVE_OVERLAY;HAVE_RGUI;HAVE_MENU;HAVE_7ZIP;HAVE_MATERIALUI;HAVE_LIBRETRODB;HAVE_STB_FONT;__STDC_CONSTANT_MACROS" + PreprocessorDefinitions="_WIN32;WINVER=0x0400;_WIN32_WINNT=0x0400;RARCH_INTERNAL;HAVE_CC_RESAMPLER;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_RPNG;HAVE_RJPEG;HAVE_RBMP;HAVE_RTGA;HAVE_IMAGEVIEWER;HAVE_XMB;WANT_ZLIB;HAVE_DINPUT;HAVE_DSOUND;HAVE_DYLIB;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;HAVE_OVERLAY;HAVE_RGUI;HAVE_MENU;HAVE_7ZIP;HAVE_MATERIALUI;HAVE_LIBRETRODB;HAVE_STB_FONT;__STDC_CONSTANT_MACROS" MinimalRebuild="TRUE" BasicRuntimeChecks="3" RuntimeLibrary="5" @@ -33,6 +33,7 @@ Name="VCCustomBuildTool"/>