通常我們使用電腦過程中會設置多長時間不操作,電腦就會滅屏、睡眠甚至是休眠。 如果電腦進入睡眠或者休眠模式,電腦運行的程序將不再執行。 如果我們設計的桌面程序一直在執行某種操作,比如持續的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文章
4981瀏覽量
140055 -
usb
+關注
關注
60文章
7949瀏覽量
264841 -
電腦
+關注
關注
15文章
1708瀏覽量
68885 -
計時器
+關注
關注
1文章
420瀏覽量
32728 -
睡眠
+關注
關注
0文章
14瀏覽量
8071
發布評論請先 登錄
相關推薦
CY8C4045AZI-S413使用外部時鐘 (48MHz) 而不是內部時鐘時可以進入睡眠模式嗎?
STM32F103進入睡眠模式或者待機模式或者停機模式,IO腳原先設置的電平值是否會改變?
使用wifi_set_sleep_type設置為light sleep后無法進入休眠怎么解決?
WICED 6.0如何進入睡眠模式?
請問SIM800A進入睡眠模式后進行喚醒有外部引腳進行電平變換進行指示嗎?
STM32F429進入睡眠的方式
筆記本電腦win10連接電源時無法進入睡眠的原因
進入睡眠模式(Sleep)的條件有哪些
低溫環境CH578M進入睡眠之后立刻死掉怎么解決?
如和讓STM8S與STM8L安全地進入睡眠狀態呢?
程序進入睡眠模式設置了定時器中斷為什么不能喚醒睡眠?
筆記本電腦合上蓋子不進入休眠模式的問題應該如何解決
![筆記本<b class='flag-5'>電腦</b>合上蓋子不<b class='flag-5'>進入</b><b class='flag-5'>休眠</b>模式的問題應該如何解決](https://file.elecfans.com/web1/M00/A2/45/o4YBAF1NLHKAADAcAAMUlYJ9rn8477.png)
32 系統進入stop模式_如何讓MCU進入睡眠狀態節省能耗?
![32 系統<b class='flag-5'>進入</b>stop模式_如何讓MCU<b class='flag-5'>進入睡眠</b>狀態節省能耗?](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何讓MCU進入睡眠狀態節省能耗?
![如何讓MCU<b class='flag-5'>進入睡眠</b>狀態節省能耗?](https://file1.elecfans.com/web2/M00/8D/A1/wKgZomS-QmCADFF0AAFAKz9joVg342.png)
評論