mblsha
mblsha

Reputation: 447

How to determine that a screensaver is running?

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?

Upvotes: 4

Views: 5738

Answers (5)

krizajb
krizajb

Reputation: 1814

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.

Upvotes: -1

Ken White
Ken White

Reputation: 125651

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

Upvotes: 10

Mesh
Mesh

Reputation: 6422

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

Upvotes: -2

f3lix
f3lix

Reputation: 29877

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.

Upvotes: 2

Galwegian
Galwegian

Reputation: 42227

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.

Upvotes: 1

Related Questions