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

Windows 如何确定屏幕保护程序正在运行?,windows,winapi,screensaver,Windows,Winapi,Screensaver,一个可以建议的解决方案是定期寻找一个特殊的“屏幕保护程序”桌面,如果它存在,那么将其作为一个正在运行的屏幕保护程序 但显然,并非所有屏幕保护程序都是如此,因为提到的一些桌面总是存在 有更可靠的解决方案吗? 我知道这是针对VB6的,但它肯定是一个很好的起点。我认为关键是通过窗口类(“WindowsScreenSaverClass”)来识别屏幕保护程序。我找到了这一页 这有一些代码示例和解释。搜索进程以查找其.main module.FileName中带有.scr的进程请参阅带有SPI\u GETS

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

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

有更可靠的解决方案吗?


我知道这是针对VB6的,但它肯定是一个很好的起点。

我认为关键是通过窗口类(“WindowsScreenSaverClass”)来识别屏幕保护程序。我找到了这一页
这有一些代码示例和解释。

搜索进程以查找其.main module.FileName中带有.scr的进程

请参阅带有SPI\u GETSCREENSAVERRUNNING参数的WINAPI函数SystemParametersInfo()。这是检测屏幕保护程序当前是否正在运行的唯一有文档记录的方法。(您还可以了解屏幕保护程序是否已启用,获取并设置超时值,然后使用此功能启动屏幕保护程序。)

是我的屏幕保护程序事件检测实现

注:

  • SPI_GETSCREENSAVERRUNNING
    检测到Windows事件id 4802和4803在我的情况下不准确,请参阅因此添加了用户空闲时间计算
  • GetLastInputInfo
    如果进程是服务,则显然不起作用