C#阻止計算機關閉顯示器和待機

一、測試

測試環境: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函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章