2017-06-14 56 views
-2

下,屏幕保護程序,我想知道如何在Windows 8的(嵌入式版本)或Windows 10中斷屏幕保護程序,因爲我的項目的一個窗口(C#)只在正常狀態下運行,否則在屏幕保護程序下運行將會出錯。所以我想在這個窗口彈出之前中斷屏幕保護程序。如何中斷Windows 8的

我已經研究了一些解決方案和想法,包括如下,

  • 一個。移動鼠標(使用的USER32的mouse_event API)
  • 灣發送密鑰(也使用user32的api)
  • c。殺死屏幕保護程序。

一個& B的雖然這兩種方式我都嘗試過,並在Windows 10效果不錯,但在Windows 8(嵌入式版本)沒有工作,所以目前我只專注於C的方式,講述方​​式三我找遍瞭如下鏈接,

https://support.microsoft.com/en-us/help/140723/how-to-force-a-screen-saver-to-close-once-started-in-windows-nt,-windows-2000,-and-windows-server-2003

https://www.codeproject.com/Articles/17067/Controlling-The-Screen-Saver-With-C

但上述鏈接仍然沒有在Windows 10和Windows 8(嵌入式版本)的工作,哪位高手給我一些建議嗎?提前致謝。

回答

1

查看非託管API函數GetSystemPowerStatusSetThreadExecutionState。使用(線程)定時器,您可以定期更新狀態,例如從一個類的屬性,並通知系統有關您的要求。如果您的應用程序可能允許或不允許屏幕保護程序,這取決於它的操作狀態,這很有用。

public class PowerManager : IDisposable 
{ 
    [Flags] 
    public enum ExecutionStateEnum : uint 
    { 
    LetTheSystemDecide = 0x00, 
    SystemRequired  = 0x01, 
    SystemDisplayRequired = 0x02, 
    UserPresent   = 0x04, 
    Continuous   = 0x80000000, 
    } 

    [DllImport("kernel32")] 
    private static extern uint SetThreadExecutionState(ExecutionStateEnum esFlags); 

    public PowerManager() {} 

    public Update(ExecutionStateEnum state) 
    { 
    SetThreadExecutionState(state); 
    } 
} 

更新:

然後調用PowerManager.Update(ExecutionStateEnum.SystemDisplayRequired)禁用屏幕保護程序,或致電PowerManager.Update(ExecutionStateEnum.LetTheSystemDecide)恢復默認的系統行爲(允許屏幕保護程序)。 如果從定時器回調中定期調用該方法,請根據配置的屏幕保護程序超時調整定時器時間間隔。

+0

它真的有用!非常感謝你! –