【问题标题】:How to suppress the ŝcreensaver right way [duplicate]如何以正确的方式抑制ŝcreensaver [重复]
【发布时间】:2017-08-08 08:46:52
【问题描述】:

在运行较长的机器进程时,我必须禁止(而不是禁用)窗口屏幕保护程序。

用 SendInput(..) 模拟一点鼠标移动是否正确?

【问题讨论】:

  • @Remy:你是对的。我的母语不是英语,所以我确实找到了这个。抑制 - 防止

标签: winapi mfc


【解决方案1】:

不,不是。

在 XP 及更高版本上,请改用 SetThreadExecutionState()

使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入睡眠或关闭显示器

...

多媒体应用程序(例如视频播放器和演示应用程序)在长时间无用户输入显示视频时必须使用ES_DISPLAY_REQUIRED

尽管文档说了什么(“此功能不会停止屏幕保护程序的执行”),但这确实会停止屏幕保护程序。

在早期版本的 Windows 上,您可以改为处理 WM_SYSCOMMAND 消息。当wParam设置为SC_SCREENSAVE时,如果不将消息传递给DefWindowProc(),屏保将不会运行,除非屏保有密码保护,在这种情况下无论WM_SYSCOMMAND 消息发生什么,都会运行:

如果通过策略启用密码保护,则无论应用程序对SC_SCREENSAVE 通知执行什么操作,都会启动屏幕保护程序,即使未能将其传递给DefWindowProc

另一种选择是使用SystemParametersInfo()SPI_SETSCREENSAVEACTIVE 设置为TRUE,这样Windows 就会认为屏幕保护程序已经在运行,因此它不会启动默认屏幕保护程序。

【讨论】:

  • 谢谢!这比你提到的链接更清晰,更全面的解释,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2012-05-17
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多