可以建议的一个解决方案是定期寻找一个特殊的“屏幕保护程序”桌面,如果它存在,则将其视为正在运行的屏幕保护程序。
但显然所有屏幕保护程序并非如此,因为有些提到的桌面总是存在。
有更可靠的解决方案吗?
答案 0 :(得分:9)
使用SPI_GETSCREENSAVERRUNNING参数查看WINAPI函数SystemParametersInfo()。这是检测屏幕保护程序当前是否正在运行的唯一记录方法。 (您还可以查看是否启用了屏幕保护程序,获取并设置超时值,并使用此功能启动屏幕保护程序。)
答案 1 :(得分:2)
HOW TO: Determine If Screen Saver Is Running by Using Visual Basic 6.0
我知道这是针对VB6的,但它必定是一个很好的起点。
答案 2 :(得分:2)
我认为关键是通过窗口类(“WindowsScreenSaverClass”)识别屏幕保护程序。我找到了这个页面 How do I start, detect and stop screen savers?有一些代码示例和解释。
答案 3 :(得分:0)
This是我实施的屏幕保护程序事件检测。
注意:
SPI_GETSCREENSAVERRUNNING
检测到在我的情况下不准确的Windows事件ID 4802和4803,请参阅my problem,因此添加了用户空闲时间计算GetLastInputInfo
显然不起作用。答案 4 :(得分:-1)
在.MainModule.FileName
中搜索.scr进程的进程