在运行长机器进程时,我必须禁止(不禁用)窗口屏幕保护程序。
使用SendInput(..)以正确的方式模拟一点鼠标移动吗?
答案 0 :(得分:1)
不,不是。
在XP及更高版本中,请改用SetThreadExecutionState()
:
允许应用程序在应用程序运行时通知系统正在使用,从而阻止系统进入睡眠状态或关闭显示屏。
...
多媒体应用程序(如视频播放器和演示应用程序)在长时间显示视频而无需用户输入时,必须使用
ES_DISPLAY_REQUIRED
。
尽管文档说明了(“此功能不会阻止屏幕保护程序执行”),但这会停止屏幕保护程序。
在早期版本的Windows上,您可以处理WM_SYSCOMMAND
消息。当wParam
设置为SC_SCREENSAVE
时,如果您未将邮件传递给DefWindowProc()
,则不会运行屏幕保护程序,除非屏幕保护程序为密码受保护,在这种情况下,无论WM_SYSCOMMAND
消息发生什么,它都会运行:
如果策略启用了密码保护,则无论应用程序对
SC_SCREENSAVE
通知执行什么操作,都会启动屏幕保护程序 - 即使未将其传递给DefWindowProc
。
另一种选择是使用SystemParametersInfo()
将SPI_SETSCREENSAVEACTIVE
设置为TRUE
,以便Windows认为屏幕保护程序已在运行,因此无法启动默认屏幕保护程序。