HOWTO: Detect If a Screen Saver Is Running on Windows NTID: Q150785
|
In Windows NT, you may find it useful to determine whether a screen saver
is running on the system. On Windows NT 5.0 and greater, you can use the
SystemParametersInfo API and specify the SPI_GETSCREENSAVERRUNNING flag to
determine this.
In previous versions of Windows NT, there is no direct way to detect
whether a screen saver is running on the system. However, there is an
indirect approach to determine if a screen saver is running by testing for
the existence of a desktop named "screen-saver" that the winlogon component
of Windows NT creates for the screen saver to execute on. This desktop is
created and destroyed when the screen saver is started and stopped.
When you use the OpenDesktop() Win32 API to attempt to open the desktop
named "screen-saver", three scenarios result that help you to determine
whether a screen saver is running:
/**
The following sample illustrates how to detect if a screen saver
is running on Windows NT. This sample works by checking for the
existence of a desktop named "screen-saver". This desktop is
created dynamically by winlogon when a screen saver needs to be
launched.
**/
#include <windows.h>
#include <stdio.h>
BOOL IsScreenSaverRunning( void );
int
__cdecl
main(
void
)
{
if(IsScreenSaverRunning()) {
printf("Screen saver is running!\n");
}
else {
printf("Screen saver is NOT running!\n");
}
return 0;
}
//
// returns TRUE if a screen saver is running, or FALSE if not.
//
BOOL
IsScreenSaverRunning(
void
)
{
HDESK hDesktop;
//
// try to open the desktop that the screen saver runs on. This
// desktop is created on the fly by winlogon, so it only exists
// when a screen saver is invoked.
//
hDesktop = OpenDesktop(
TEXT("screen-saver"), // desktop name where screen saver runs
0,
FALSE,
MAXIMUM_ALLOWED // open for all possible access
);
if(hDesktop == NULL) {
//
// if the call fails due to access denied, the screen saver
// is running because the specified desktop exists - we just
// don't have any access.
//
if(GetLastError() == ERROR_ACCESS_DENIED) return TRUE;
//
// otherwise, indicate the screen saver isn't running
//
return FALSE;
}
//
// successfully opened the desktop (the screen saver is running)
//
CloseDesktop(hDesktop);
return TRUE;
}
Keywords : kbcode kbnokeyword kbKernBase GdiScrsav kbGrpKernBase
Version : WINNT:3.5,3.51,4.0,5.0;
Platform : NT WINDOWS
Issue type : kbhowto
Last Reviewed: March 10, 1999