如何正确压制屏幕保护程序

时间:2017-03-16 23:26:04

标签: winapi mfc

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

使用SendInput(..)以正确的方式模拟一点鼠标移动吗?

1 个答案:

答案 0 :(得分:1)

不,不是。

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

  

允许应用程序在应用程序运行时通知系统正在使用,从而阻止系统进入睡眠状态或关闭显示屏

     

...

     

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

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

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

  

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

另一种选择是使用SystemParametersInfo()SPI_SETSCREENSAVEACTIVE设置为TRUE,以便Windows认为屏幕保护程序已在运行,因此无法启动默认屏幕保护程序。