通常我們使用電腦過(guò)程中會(huì)設(shè)置多長(zhǎng)時(shí)間不操作,電腦就會(huì)滅屏、睡眠甚至是休眠。 如果電腦進(jìn)入睡眠或者休眠模式,電腦運(yùn)行的程序?qū)⒉辉賵?zhí)行。 如果我們?cè)O(shè)計(jì)的桌面程序一直在執(zhí)行某種操作,比如持續(xù)的USB通信,操作人可能會(huì)離開(kāi)很久,這個(gè)時(shí)候,我們不希望電腦進(jìn)入睡眠或者休眠模式。 那么該如何實(shí)現(xiàn)這一功能呢?
系統(tǒng)中相關(guān)接口文件是提供了這一功能,即調(diào)用如下方法即可:
[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,
}
如上所示,只需要設(shè)置系統(tǒng)狀態(tài)即可,ExcutionState各個(gè)枚舉變量的含義為:SystemRequired,強(qiáng)行設(shè)置系統(tǒng)IDLE計(jì)時(shí)器,使得系統(tǒng)一直處于工作態(tài); DisplayRequired,通過(guò)重置顯示器IDLE計(jì)時(shí)器,使得顯示器一直處于顯示狀態(tài); Continues,系統(tǒng)狀態(tài)維持當(dāng)前狀態(tài),直到下一次方法調(diào)用或者標(biāo)志位改變。
系統(tǒng)狀態(tài)枚舉變量
具體調(diào)用方法如下:
// 設(shè)置此線(xiàn)程此時(shí)開(kāi)始一直將處于運(yùn)行狀態(tài),此時(shí)計(jì)算機(jī)不應(yīng)該進(jìn)入睡眠狀態(tài)。
// 此線(xiàn)程退出后,設(shè)置將失效。
// 如果需要恢復(fù),請(qǐng)調(diào)用 <"RestoreForCurrentThread"/> 方法。
//
// 表示是否應(yīng)該同時(shí)保持屏幕不關(guān)閉。
// 對(duì)于游戲、視頻和演示相關(guān)的任務(wù)需要保持屏幕不關(guān)閉;而對(duì)于后臺(tái)服務(wù)、下載和監(jiān)控等任務(wù)則不需要。
public static void PresentForCurrentThread(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.Continues|ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.Continues| ExecutionState.SystemRequired));
}
//恢復(fù)此線(xiàn)程的運(yùn)行狀態(tài),操作系統(tǒng)現(xiàn)在可以正常進(jìn)入睡眠狀態(tài)和關(guān)閉屏幕。
public static void RestoreForCurrentThread()
{
SetThreadExecutionState(ExecutionState.Continues);
}
// 重置系統(tǒng)睡眠或者關(guān)閉屏幕的計(jì)時(shí)器,這樣系統(tǒng)睡眠或者屏幕能夠繼續(xù)持續(xù)工作設(shè)定的超時(shí)時(shí)間。
//
// 表示是否應(yīng)該同時(shí)保持屏幕不關(guān)閉。
// 對(duì)于游戲、視頻和演示相關(guān)的任務(wù)需要保持屏幕不關(guān)閉;而對(duì)于后臺(tái)服務(wù)、下載和監(jiān)控等任務(wù)則不需要。
public static void ResetIdle(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.SystemRequired));
}
因此,只要調(diào)用ResetIdle(true)就可以實(shí)現(xiàn)屏幕常亮并且系統(tǒng)運(yùn)行正常。 如果要取消只要調(diào)用RestoreForCurrentThread()即可。
-
顯示器
+關(guān)注
關(guān)注
21文章
4983瀏覽量
140095 -
usb
+關(guān)注
關(guān)注
60文章
7955瀏覽量
264965 -
電腦
+關(guān)注
關(guān)注
15文章
1713瀏覽量
68916 -
計(jì)時(shí)器
+關(guān)注
關(guān)注
1文章
422瀏覽量
32740 -
睡眠
+關(guān)注
關(guān)注
0文章
14瀏覽量
8072
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論