如何确定屏幕保护程序正在运行?

时间:2009-02-04 09:57:40

标签: windows winapi screensaver

可以建议的一个解决方案是定期寻找一个特殊的“屏幕保护程序”桌面,如果它存在,则将其视为正在运行的屏幕保护程序。

但显然所有屏幕保护程序并非如此,因为有些提到的桌面总是存在。

有更可靠的解决方案吗?

5 个答案:

答案 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进程的进程