有一个解决方案可以建议,就是定期查找特殊的“屏幕保护程序”桌面,如果存在,则将其视为正在运行的屏幕保护程序。 但显然,并非所有屏幕保护程序都是这种情况,因为有些屏幕保护程序始终存在所述桌面。 是否有更可靠的解决方案?
查看使用SPI_GETSCREENSAVERRUNNING参数的WINAPI函数SystemParametersInfo()。这是唯一文档记录的检测屏幕保护程序是否正在运行的方法。(你还可以使用此函数了解屏幕保护程序是否已启用,获取和设置超时值以及启动屏幕保护程序。)
这是我对屏幕保护程序事件检测的实现。 注: SPI_GETSCREENSAVERRUNNING 检测 Windows 事件 ID 4802 和 4803,在我的情况下不准确,请参见我的问题,因此添加了用户空闲时间计算。 GetLastInputInfo 显然在进程为服务时无法工作。