windows8下如何中断屏保
How to interrupt Screen-saver under windows 8
我想知道在Windows8(内嵌版)或Windows10下如何中断屏保,因为我的项目只有一个window(C#)运行在正常状态下,否则在屏保下运行会报错。所以我想在此 window 弹出窗口之前中断屏幕保护程序。
我研究了一些解决方案和想法,包括如下,
- 一个。移动鼠标(用了user32的mouse_event api)
- b。发送密钥(也用了user32的api)
- c。终止屏幕保护程序。
a 和 b 都是我尝试过的方法,并且在 windows 10 上工作得很好,但在 Windows 8(嵌入式版本)上没有工作,所以目前我只关注c方式,关于c方式我搜索如下link,
https://www.codeproject.com/Articles/17067/Controlling-The-Screen-Saver-With-C
但是link以上的在windows10和Windows8(内嵌版)上还是不行,哪位高手给点建议?提前致谢。
查看非托管 API 函数 GetSystemPowerStatus
和 SetThreadExecutionState
。使用(线程)计时器,您可以定期更新状态,例如来自 class 属性,并告知系统您的要求。这很有用,如果您的应用程序可能允许或禁止屏幕保护程序,具体取决于它的操作状态。
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)
恢复默认系统行为(允许屏幕保护程序)。
如果从计时器回调中定期调用该方法,请根据配置的屏幕保护程序超时调整计时器间隔。
我想知道在Windows8(内嵌版)或Windows10下如何中断屏保,因为我的项目只有一个window(C#)运行在正常状态下,否则在屏保下运行会报错。所以我想在此 window 弹出窗口之前中断屏幕保护程序。
我研究了一些解决方案和想法,包括如下,
- 一个。移动鼠标(用了user32的mouse_event api)
- b。发送密钥(也用了user32的api)
- c。终止屏幕保护程序。
a 和 b 都是我尝试过的方法,并且在 windows 10 上工作得很好,但在 Windows 8(嵌入式版本)上没有工作,所以目前我只关注c方式,关于c方式我搜索如下link,
https://www.codeproject.com/Articles/17067/Controlling-The-Screen-Saver-With-C
但是link以上的在windows10和Windows8(内嵌版)上还是不行,哪位高手给点建议?提前致谢。
查看非托管 API 函数 GetSystemPowerStatus
和 SetThreadExecutionState
。使用(线程)计时器,您可以定期更新状态,例如来自 class 属性,并告知系统您的要求。这很有用,如果您的应用程序可能允许或禁止屏幕保护程序,具体取决于它的操作状态。
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)
恢复默认系统行为(允许屏幕保护程序)。
如果从计时器回调中定期调用该方法,请根据配置的屏幕保护程序超时调整计时器间隔。