Mercurial > foo_out_sdl
diff foosdk/sdk/libPPUI/CPowerRequest.cpp @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foosdk/sdk/libPPUI/CPowerRequest.cpp Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,68 @@ +#include "stdafx.h" + +#include "CPowerRequest.h" + +#ifdef CPowerRequestAPI_Avail + +class CPowerRequestAPI { +public: + static void ToggleSystem(HANDLE hRequest, bool bSystem) { + Toggle(hRequest, bSystem, PowerRequestSystemRequired); + } + + static void ToggleExecution(HANDLE hRequest, bool bSystem) { + const POWER_REQUEST_TYPE RequestType = IsWindows8OrGreater() ? PowerRequestExecutionRequired : PowerRequestSystemRequired; + Toggle(hRequest, bSystem, RequestType); + } + + static void ToggleDisplay(HANDLE hRequest, bool bDisplay) { + Toggle(hRequest, bDisplay, PowerRequestDisplayRequired); + } + + static void Toggle(HANDLE hRequest, bool bToggle, POWER_REQUEST_TYPE what) { + if (bToggle) { + PowerSetRequest(hRequest, what); + } else { + PowerClearRequest(hRequest, what); + } + } +}; + +CPowerRequest::CPowerRequest(const wchar_t * Reason) : m_Request(INVALID_HANDLE_VALUE), m_bSystem(), m_bDisplay() { + REASON_CONTEXT ctx = {POWER_REQUEST_CONTEXT_VERSION, POWER_REQUEST_CONTEXT_SIMPLE_STRING}; + ctx.Reason.SimpleReasonString = const_cast<wchar_t*>(Reason); + m_Request = PowerCreateRequest(&ctx); +} + +void CPowerRequest::SetSystem(bool bSystem) { + if (bSystem == m_bSystem) return; + m_bSystem = bSystem; + if (m_Request != INVALID_HANDLE_VALUE) { + CPowerRequestAPI::ToggleSystem( m_Request, bSystem ); + } +} + +void CPowerRequest::SetExecution(bool bExecution) { + if (bExecution == m_bSystem) return; + m_bSystem = bExecution; + if (m_Request != INVALID_HANDLE_VALUE) { + CPowerRequestAPI::ToggleExecution( m_Request, bExecution ); + } +} + +void CPowerRequest::SetDisplay(bool bDisplay) { + if (bDisplay == m_bDisplay) return; + m_bDisplay = bDisplay; + if (m_Request != INVALID_HANDLE_VALUE) { + CPowerRequestAPI::ToggleDisplay(m_Request, bDisplay); + } +} + +CPowerRequest::~CPowerRequest() { + if (m_Request != INVALID_HANDLE_VALUE) { + CloseHandle(m_Request); + } +} + +#endif // _WIN32 +
