增加了Windows里阻止系统电源选项里的系统睡眠,屏幕关闭API
This commit is contained in:
parent
438b1cd0c7
commit
1dc2ec9b53
@ -37,6 +37,36 @@ namespace Sunny.UI
|
||||
/// </summary>
|
||||
public static class SystemEx
|
||||
{
|
||||
/// <summary>
|
||||
/// 阻止系统电源选项里的系统睡眠,屏幕关闭。
|
||||
/// </summary>
|
||||
/// <param name="keepDisplayOn"></param>
|
||||
public static void StartKeepDisplayOn(bool keepDisplayOn = true)
|
||||
{
|
||||
Kernel.SetThreadExecutionState(keepDisplayOn
|
||||
? ExecutionState.Continuous | ExecutionState.SystemRequired | ExecutionState.DisplayRequired
|
||||
: ExecutionState.Continuous | ExecutionState.SystemRequired);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 恢复系统电源选项里的系统睡眠,屏幕关闭。
|
||||
/// </summary>
|
||||
public static void RestoreDisplayState()
|
||||
{
|
||||
Kernel.SetThreadExecutionState(ExecutionState.Continuous);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重置系统计时器,临时性阻止系统睡眠和屏幕关闭。此效果类似于手动使用鼠标或键盘控制了一下电脑。
|
||||
/// </summary>
|
||||
/// <param name="keepDisplayOn"></param>
|
||||
public static void ResetDisplayState(bool keepDisplayOn = true)
|
||||
{
|
||||
Kernel.SetThreadExecutionState(keepDisplayOn
|
||||
? ExecutionState.SystemRequired | ExecutionState.DisplayRequired
|
||||
: ExecutionState.SystemRequired);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取程序当前窗口的大小和位置
|
||||
/// </summary>
|
||||
|
@ -178,8 +178,43 @@ namespace Sunny.UI.Win32
|
||||
uint BufferLength, IntPtr PreviousState, uint ReturnLength);
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum ExecutionState : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Forces the system to be in the working state by resetting the system idle timer.
|
||||
/// </summary>
|
||||
SystemRequired = 0x01,
|
||||
|
||||
/// <summary>
|
||||
/// Forces the display to be on by resetting the display idle timer.
|
||||
/// </summary>
|
||||
DisplayRequired = 0x02,
|
||||
|
||||
/// <summary>
|
||||
/// This value is not supported. If <see cref="UserPresent"/> is combined with other esFlags values, the call will fail and none of the specified states will be set.
|
||||
/// </summary>
|
||||
[Obsolete("This value is not supported.")]
|
||||
UserPresent = 0x04,
|
||||
|
||||
/// <summary>
|
||||
/// Enables away mode. This value must be specified with <see cref="Continuous"/>.
|
||||
/// <para />
|
||||
/// Away mode should be used only by media-recording and media-distribution applications that must perform critical background processing on desktop computers while the computer appears to be sleeping.
|
||||
/// </summary>
|
||||
AwaymodeRequired = 0x40,
|
||||
|
||||
/// <summary>
|
||||
/// Informs the system that the state being set should remain in effect until the next call that uses <see cref="Continuous"/> and one of the other state flags is cleared.
|
||||
/// </summary>
|
||||
Continuous = 0x80000000,
|
||||
}
|
||||
|
||||
public partial class Kernel
|
||||
{
|
||||
[DllImport("kernel32")]
|
||||
public static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags);
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
|
||||
public static extern Int32 CompareStringEx(string localeName, int flags, string str1, int count1, string str2,
|
||||
int count2, IntPtr versionInformation, IntPtr reserved, int param);
|
||||
|
Loading…
x
Reference in New Issue
Block a user