【发布时间】:2017-08-08 08:46:52
【问题描述】:
在运行较长的机器进程时,我必须禁止(而不是禁用)窗口屏幕保护程序。
用 SendInput(..) 模拟一点鼠标移动是否正确?
【问题讨论】:
-
@Remy:你是对的。我的母语不是英语,所以我确实找到了这个。抑制 - 防止
在运行较长的机器进程时,我必须禁止(而不是禁用)窗口屏幕保护程序。
用 SendInput(..) 模拟一点鼠标移动是否正确?
【问题讨论】:
不,不是。
在 XP 及更高版本上,请改用 SetThreadExecutionState():
使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入睡眠或关闭显示器。
...
多媒体应用程序(例如视频播放器和演示应用程序)在长时间无用户输入显示视频时必须使用
ES_DISPLAY_REQUIRED。
尽管文档说了什么(“此功能不会停止屏幕保护程序的执行”),但这确实会停止屏幕保护程序。
在早期版本的 Windows 上,您可以改为处理 WM_SYSCOMMAND 消息。当wParam设置为SC_SCREENSAVE时,如果不将消息传递给DefWindowProc(),屏保将不会运行,除非屏保有密码保护,在这种情况下无论WM_SYSCOMMAND 消息发生什么,都会运行:
如果通过策略启用密码保护,则无论应用程序对
SC_SCREENSAVE通知执行什么操作,都会启动屏幕保护程序,即使未能将其传递给DefWindowProc。
另一种选择是使用SystemParametersInfo() 将SPI_SETSCREENSAVEACTIVE 设置为TRUE,这样Windows 就会认为屏幕保护程序已经在运行,因此它不会启动默认屏幕保护程序。
【讨论】: