From 6d4212ca06406525508fb22027f0922f7528fc04 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 4 Mar 2016 04:51:57 +0100 Subject: [PATCH] Check OS version before going down screensaver path --- gfx/common/win32_common.cpp | 46 +++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/gfx/common/win32_common.cpp b/gfx/common/win32_common.cpp index 5452ecacc6..a8f17b0110 100644 --- a/gfx/common/win32_common.cpp +++ b/gfx/common/win32_common.cpp @@ -13,6 +13,8 @@ * If not, see . */ +#include + #include "../../general.h" #include "../../verbosity.h" #include "win32_common.h" @@ -386,32 +388,42 @@ bool win32_suppress_screensaver(void *data, bool enable) #ifdef _XBOX return false; #else - typedef HANDLE (WINAPI * PowerCreateRequestPtr)(REASON_CONTEXT *context); - typedef BOOL (WINAPI * PowerSetRequestPtr)(HANDLE PowerRequest, POWER_REQUEST_TYPE RequestType); - HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll"); - PowerCreateRequestPtr powerCreateRequest = - (PowerCreateRequestPtr)GetProcAddress(kernel32, "PowerCreateRequest"); - PowerSetRequestPtr powerSetRequest = - (PowerSetRequestPtr)GetProcAddress(kernel32, "PowerSetRequest"); if(enable) { - if(powerCreateRequest && powerSetRequest) + int major, minor; + char tmp[PATH_MAX_LENGTH]; + + frontend->get_os(tmp, sizeof(tmp), &major, &minor); + + if (major >= 6 && minor >= 1) { /* Windows 7, 8, 10 codepath */ - POWER_REQUEST_CONTEXT RequestContext; - HANDLE Request; + typedef HANDLE (WINAPI * PowerCreateRequestPtr)(REASON_CONTEXT *context); + typedef BOOL (WINAPI * PowerSetRequestPtr)(HANDLE PowerRequest, + POWER_REQUEST_TYPE RequestType); + HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll"); + PowerCreateRequestPtr powerCreateRequest = + (PowerCreateRequestPtr)GetProcAddress(kernel32, "PowerCreateRequest"); + PowerSetRequestPtr powerSetRequest = + (PowerSetRequestPtr)GetProcAddress(kernel32, "PowerSetRequest"); - RequestContext.Version = POWER_REQUEST_CONTEXT_VERSION; - RequestContext.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING; - RequestContext.Reason.SimpleReasonString = (LPWSTR)L"RetroArch running"; + if(powerCreateRequest && powerSetRequest) + { + POWER_REQUEST_CONTEXT RequestContext; + HANDLE Request; - Request = powerCreateRequest(&RequestContext); + RequestContext.Version = POWER_REQUEST_CONTEXT_VERSION; + RequestContext.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING; + RequestContext.Reason.SimpleReasonString = (LPWSTR)L"RetroArch running"; - powerSetRequest( Request, PowerRequestDisplayRequired); - return true; + Request = powerCreateRequest(&RequestContext); + + powerSetRequest( Request, PowerRequestDisplayRequired); + return true; + } } - else + else { /* XP / Vista codepath */ SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);