views:

505

answers:

4

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 apparently this is not the case for all screensavers as with some the mentioned desktop is always present.

Are there more reliable solutions for this?

+2  A: 

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.

Galwegian
+2  A: 

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.

f3lix
A: 

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

Adrian
+5  A: 

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.)

Ken White