How to determine that a screensaver is running?

前端 未结 5 2027
暖寄归人
暖寄归人 2021-01-13 22:08

One solution that one could suggest is to periodically look for a special \'Screen-saver\' desktop, and if it\'s present then count it as a running screensaver.

But

相关标签:
5条回答
  • 2021-01-13 22:20

    search processes for a process with .scr in its .MainModule.FileName

    0 讨论(0)
  • 2021-01-13 22:23

    This is my implementation of screen saver event detection.

    Notes:

    • SPI_GETSCREENSAVERRUNNING detects Windows Event id 4802 and 4803 which weren't accurate in my case, see my problem hence user idle time calculation is added
    • GetLastInputInfo apparently doesn't work if process is a service.
    0 讨论(0)
  • 2021-01-13 22:24

    See the WINAPI function SystemParametersInfo() with the SPI_GETSCREENSAVERRUNNING parameter. It's the only documented way to detect whether the screen saver is currently running. (You can also find out if a screen saver is even enabled, get and set the timeout value, and start the screen saver using this function.)

    0 讨论(0)
  • 2021-01-13 22:27

    I think the key is to identify the screensaver by its window class ("WindowsScreenSaverClass"). I found this page How do I start, detect and stop screen savers? that has some code examples and explanations.

    0 讨论(0)
  • 2021-01-13 22:37

    HOW TO: Determine If Screen Saver Is Running by Using Visual Basic 6.0

    I know this is for VB6, but it's bound to be a good place to start.

    0 讨论(0)
提交回复
热议问题