aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.ServerApplication/Native/Standby.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.ServerApplication/Native/Standby.cs')
-rw-r--r--MediaBrowser.ServerApplication/Native/Standby.cs40
1 files changed, 26 insertions, 14 deletions
diff --git a/MediaBrowser.ServerApplication/Native/Standby.cs b/MediaBrowser.ServerApplication/Native/Standby.cs
index 274c72b25..919709538 100644
--- a/MediaBrowser.ServerApplication/Native/Standby.cs
+++ b/MediaBrowser.ServerApplication/Native/Standby.cs
@@ -1,4 +1,5 @@
-using System.Runtime.InteropServices;
+using System;
+using System.Runtime.InteropServices;
namespace MediaBrowser.ServerApplication.Native
{
@@ -7,11 +8,33 @@ namespace MediaBrowser.ServerApplication.Native
/// </summary>
public static class Standby
{
- public static void PreventSystemStandby()
+ public static void PreventSleepAndMonitorOff()
{
- SystemHelper.ResetStandbyTimer();
+ NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED | NativeMethods.ES_DISPLAY_REQUIRED);
}
+ public static void PreventSleep()
+ {
+ NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED);
+ }
+
+ // Clear EXECUTION_STATE flags to allow the system to sleep and turn off monitor normally
+ public static void AllowSleep()
+ {
+ NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS);
+ }
+
+ internal static class NativeMethods
+ {
+ // Import SetThreadExecutionState Win32 API and necessary flags
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ public static extern uint SetThreadExecutionState(uint esFlags);
+ public const uint ES_CONTINUOUS = 0x80000000;
+ public const uint ES_SYSTEM_REQUIRED = 0x00000001;
+ public const uint ES_DISPLAY_REQUIRED = 0x00000002;
+ }
+
+ [Flags]
internal enum EXECUTION_STATE : uint
{
ES_NONE = 0,
@@ -21,16 +44,5 @@ namespace MediaBrowser.ServerApplication.Native
ES_AWAYMODE_REQUIRED = 0x00000040,
ES_CONTINUOUS = 0x80000000
}
-
- public class SystemHelper
- {
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
-
- public static void ResetStandbyTimer()
- {
- EXECUTION_STATE es = SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED);
- }
- }
}
}