通常我們使用電腦過程中會設置多長時間不操作,電腦就會滅屏、睡眠甚至是休眠。 如果電腦進入睡眠或者休眠模式,電腦運行的程序將不再執行。 如果我們設計的桌面程序一直在執行某種操作,比如持續的USB通信,操作人可能會離開很久,這個時候,我們不希望電腦進入睡眠或者休眠模式。 那么該如何實現這一功能呢?
系統中相關接口文件是提供了這一功能,即調用如下方法即可:
[DllImport("kernel32")]
private static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags);
[Flags]
private enum ExecutionState : uint
{
SystemRequired = 0x01,
DisplayRequired = 0x02,
[Obsolete("This value is not supported.")]
UserPresent = 0x04,
AwayModeRequired = 0x40,
Continues = 0x80000000,
}
如上所示,只需要設置系統狀態即可,ExcutionState各個枚舉變量的含義為:SystemRequired,強行設置系統IDLE計時器,使得系統一直處于工作態; DisplayRequired,通過重置顯示器IDLE計時器,使得顯示器一直處于顯示狀態; Continues,系統狀態維持當前狀態,直到下一次方法調用或者標志位改變。
系統狀態枚舉變量
具體調用方法如下:
// 設置此線程此時開始一直將處于運行狀態,此時計算機不應該進入睡眠狀態。
// 此線程退出后,設置將失效。
// 如果需要恢復,請調用 <"RestoreForCurrentThread"/> 方法。
//
// 表示是否應該同時保持屏幕不關閉。
// 對于游戲、視頻和演示相關的任務需要保持屏幕不關閉;而對于后臺服務、下載和監控等任務則不需要。
public static void PresentForCurrentThread(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.Continues|ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.Continues| ExecutionState.SystemRequired));
}
//恢復此線程的運行狀態,操作系統現在可以正常進入睡眠狀態和關閉屏幕。
public static void RestoreForCurrentThread()
{
SetThreadExecutionState(ExecutionState.Continues);
}
// 重置系統睡眠或者關閉屏幕的計時器,這樣系統睡眠或者屏幕能夠繼續持續工作設定的超時時間。
//
// 表示是否應該同時保持屏幕不關閉。
// 對于游戲、視頻和演示相關的任務需要保持屏幕不關閉;而對于后臺服務、下載和監控等任務則不需要。
public static void ResetIdle(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.SystemRequired));
}
因此,只要調用ResetIdle(true)就可以實現屏幕常亮并且系統運行正常。 如果要取消只要調用RestoreForCurrentThread()即可。
-
顯示器
+關注
關注
21文章
4951瀏覽量
139830 -
usb
+關注
關注
60文章
7900瀏覽量
264010 -
電腦
+關注
關注
15文章
1680瀏覽量
68680 -
計時器
+關注
關注
1文章
419瀏覽量
32636 -
睡眠
+關注
關注
0文章
14瀏覽量
8069
發布評論請先 登錄
相關推薦
評論