一、測試
測試環境:Win10
備註:
1、管理員和非管理員權限測試都正常;
2、執行阻止關閉顯示器和待機後,退出程序會自動恢復;
3、使用Win+L切換到鎖屏界面時,同樣生效;
二、代碼
代碼來源:
https://www.cnblogs.com/TianFang/archive/2012/10/12/2721883.html
public class SystemSleepAPI
{
//定義API函數
[DllImport("kernel32.dll")]
static extern uint SetThreadExecutionState(ExecutionFlag flags);
[Flags]
enum ExecutionFlag : uint
{
System = 0x00000001,
Display = 0x00000002,
Continus = 0x80000000,
}
/// <summary>
///阻止系統休眠,直到線程結束恢復休眠策略
/// </summary>
/// <param name="includeDisplay">是否阻止關閉顯示器</param>
public static void PreventSleep(bool includeDisplay = false)
{
try
{
if (includeDisplay)
SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Display | ExecutionFlag.Continus);
else
SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Continus);
}
catch { }
}
/// <summary>
///恢復系統休眠策略
/// </summary>
public static void ResotreSleep()
{
try { SetThreadExecutionState(ExecutionFlag.Continus); } catch { }
}
/// <summary>
///重置系統休眠計時器
/// </summary>
/// <param name="includeDisplay">是否阻止關閉顯示器</param>
public static void ResetSleepTimer(bool includeDisplay = false)
{
try
{
if (includeDisplay)
SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Display);
else
SetThreadExecutionState(ExecutionFlag.System);
}
catch { }
}
}
三、使用方法
方法1:計時器定期執行ResetSleepTimer函數
方法2:阻止時執行PreventSleep函數,恢復時執行ResotreSleep函數