Article ID: 318781 - Last Review: February 12, 2007 - Revision: 1.1

BUG: SystemParametersInfo with SPI_GETSCREENSAVEACTIVE Always Returns True on Windows 2000

System TipThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
This article was previously published under Q318781

On This Page

Expand all | Collapse all

SYMPTOMS

The SystemParametersInfo function with the uiAction parameter set to SPI_GETSCREENSAVEACTIVE returns True although no screen saver is active.

RESOLUTION

You can work around this problem by querying the registry to check whether the screen saver is active. The presence of the Scrnsave.exe file under the registry key HKCU\Control Panel\Desktop indicates that the screen saver is active.

The following sample code demonstrates this condition:

HKEY hKeySreenSaver = NULL;
long lReturn = NULL;
long lScreenSaver = NULL;
DWORD dwData = NULL;
	
lReturn = RegOpenKeyEx(HKEY_CURRENT_USER,
			TEXT("Control Panel\\Desktop"),
			0,
			KEY_QUERY_VALUE,
			&hKeySreenSaver);
if(lReturn == ERROR_SUCCESS)

{
	lScreenSaver = RegQueryValueEx(hKeySreenSaver, 
				   TEXT("SCRNSAVE.EXE"),
				   NULL,
				   NULL,
				   NULL,
				   &dwData);

	if(lScreenSaver == ERROR_SUCCESS)
		MessageBox(NULL, 
			   "Screen Saver is Active", 
			   "Screen Saver",
			   MB_OK);
		
	else
		MessageBox(NULL, 
			   "Screen Saver is Not Active", 
			   "Screen Saver",
			   MB_OK);
	
}
RegCloseKey(hKeyScreenSaver);
hKeyScreenSaver = NULL;
				

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

MORE INFORMATION

Steps to Reproduce the Behavior

  1. Set the screen saver to None:

    Click Start menu, point to Control Panel, double-click Display, click the Screen Saver tab, and then select None in the Screen Saver box.
  2. Call SystemParametersInfo function with the uiAction parameter set to SPI_GETSCREENSAVEACTIVE.
    bool result = false;
    SystemParametersInfo(SPI_GETSCREENSAVEACTIVE,0,(LPVOID)&result,0);
    					
Note that the value of the result is set to True even though no screen saver is active.

APPLIES TO
  • Microsoft Windows 2000 Standard Edition
Keywords: 
kbbug kbnofix KB318781