前沿拓展:
通常我們使用電腦過程中會設(shè)置多長時(shí)間不**作,電腦就會滅屏、睡眠甚至是休眠。如果電腦進(jìn)入睡眠或者休眠模式,電腦運(yùn)行的程序?qū)⒉辉賵?zhí)行。如果我們設(shè)計(jì)的桌面程序一直在執(zhí)行某種**作,比如持續(xù)的U**通信,**作人可能會離開很久,這個(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,通過重置顯示器IDLE計(jì)時(shí)器,使得顯示器一直處于顯示狀態(tài);Continues,系統(tǒng)狀態(tài)維持當(dāng)前狀態(tài),直到下一次方法調(diào)用或者標(biāo)志位改變。
Microsoft官網(wǎng)參考鏈接為:SetThreadExecutionState function (winbase.h) – Win32 apps | Microsoft Learn
系統(tǒng)狀態(tài)枚舉變量
具體調(diào)用方法如下:
// 設(shè)置此線程此時(shí)開始一直將處于運(yùn)行狀態(tài),此時(shí)計(jì)算機(jī)不應(yīng)該進(jìn)入睡眠狀態(tài)。
// 此線程退出后,設(shè)置將失效。
// 如果需要恢復(fù),請調(diào)用 <"RestoreForCurrentThread"/> 方法。
// <param name="keepDisplayOn">
// 表示是否應(yīng)該同時(shí)保持屏幕不關(guān)閉。
// 對于游戲、視頻和演示相關(guān)的任務(wù)需要保持屏幕不關(guān)閉;而對于后臺服務(wù)、下載和**等任務(wù)則不需要。
public static void PresentForCurrentThread(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.Continues|ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.Continues| ExecutionState.SystemRequired));
}
//恢復(fù)此線程的運(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í)間。
// <param name="keepDisplayOn">
// 表示是否應(yīng)該同時(shí)保持屏幕不關(guān)閉。
// 對于游戲、視頻和演示相關(guān)的任務(wù)需要保持屏幕不關(guān)閉;而對于后臺服務(wù)、下載和**等任務(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()即可。
拓展知識:
win10關(guān)閉sreen
擊開始——設(shè)置——隱私——關(guān)閉**artscreen篩選器檢測功能(在右邊)。
本回答被提問者采納
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請注明出處:http://xiesong.cn/132380.html