我想知道如何在Windows 8(嵌入式版本)或Windows 10下中断屏幕保护程序,因为我项目的窗口(C#)只能在正常状态下运行,否则如果在屏幕下运行则会出错-saver。所以我想在弹出这个窗口之前中断屏幕保护程序。
我研究了一些解决方案和想法,包括如下,
两者都是& b是我尝试过它们并在Windows 10上运行良好的方法,但是没有在Windows 8(嵌入式版本)上运行,所以目前我只专注于c方式,关于c的方式我搜索了如下链接,
https://www.codeproject.com/Articles/17067/Controlling-The-Screen-Saver-With-C
但上面的链接仍然无法在Windows 10和Windows 8(嵌入式版本)上运行,哪位高手给我一些建议?提前谢谢。
答案 0 :(得分:1)
查看非托管API函数GetSystemPowerStatus
和SetThreadExecutionState
。使用(线程)计时器,您可以定期更新状态,例如从类属性,并通知系统您的要求。如果您的应用程序允许或禁止屏幕保护程序,这取决于它的运行状态,这很有用。
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)
以恢复默认系统行为(允许屏幕保护程序)。
如果从定时器回调中定期调用该方法,请根据配置的屏幕保护程序超时调整定时器间隔。