Cómo forzar un protector de pantalla para cerrar una vez iniciado en Windows NT, Windows 2000 y Windows Server 2003

Seleccione idioma Seleccione idioma
Id. de artículo: 140723 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

A veces las aplicaciones que necesite terminar un protector de pantalla ya se está ejecutando. En Microsoft Windows 95, un protector de pantalla no se pudo terminarse fácilmente con envíe un mensaje se ha WM_CLOSE a la ventana de protector de pantalla actualmente activo como en este ejemplo:
PostMessage (GetActiveWindow(), se ha WM_CLOSE, 0, 0 L);
Microsoft Windows NT, sin embargo, presenta el concepto de escritorios independientes, de forma que pueden ejecutar aplicaciones en uno y protectores de pantalla pueden ejecutar en otro. Esto dificulta terminación de protector de pantalla en Windows NT, Windows 2000 y Windows Server 2003 un poco más.

Más información

El proceso de obtener un identificador de la ventana de protector de pantalla actualmente activo es diferente para sistemas operativos que son posteriores a Windows 95. En Windows NT, en Microsoft Windows 2000 y en Microsoft Windows Server 2003, puede ejecutar el protector de pantalla en el escritorio de predeterminado o en un escritorio independiente, dependiendo de una en las propiedades de pantalla:
  • Si activa la casilla de verificación proteger con contraseña al reanudar en la ficha Protector de pantalla del cuadro de diálogo Propiedades de pantalla , el protector de pantalla se ejecuta en su propio escritorio.
  • Si desactiva la casilla de verificación que se describe en el punto anterior, el protector de pantalla se ejecuta en el escritorio predeterminado.
No puede utilizar la función GetForegroundWindow() o FindWindow de la función para determinar si el protector de pantalla está activo actualmente:
  • La función GetForegroundWindow() devuelve NULL porque el protector de pantalla se está ejecutando en un escritorio desde el escritorio que se ejecuta la aplicación de llamada en diferente.
  • La función FindWindow ("WindowsScreenSaverClass", NULL) no funciona bien.
Por lo tanto, Microsoft recomienda la siguiente:
  • Código para cerrar el protector de pantalla determina primero si el protector de pantalla se está ejecutando en su propio escritorio.
  • Si el protector de pantalla se está ejecutando en su propio escritorio, el código cierra el protector de pantalla no existe.
  • Si no hay ningún escritorio para el protector de pantalla, el código utiliza el escritorio predeterminado.


Para ello, obtener un identificador para escritorio del protector de pantalla, enumerar ventanas del escritorio que y, a continuación, contabilizar una se ha WM_CLOSE a la ventana de protector de pantalla.

El código siguiente muestra cómo hacerlo. Nota que si se establece una contraseña de protector de pantalla, el código siguiente abre el cuadro de diálogo contraseña, pide al usuario una contraseña y, a continuación, en realidad termina la aplicación de protector de pantalla.
BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam) 
{ 
	if(IsWindowVisible(hwnd)) 
		PostMessage(hwnd, WM_CLOSE, 0, 0); 
	return TRUE; 
} 
HDESK hdesk; 
hdesk = OpenDesktop(TEXT("Screen-saver"), 0, FALSE, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS); 
if (hdesk) 
{ 
	EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0);
	CloseDesktop(hdesk); } 
else 
{ 
	// Windows 2000 and later: 
	// If there is no screen saver desktop, the screen saver 
	// is on the default desktop. Close it by sending a 
	// WM_CLOSE. PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0L); 
} 
tenga en cuenta que terminar un protector de pantalla ya se está ejecutando como se demostró anteriormente es totalmente independiente de deshabilitar el protector de pantalla, para ningún protector de pantalla cuando finalice de período de tiempo designado. Esto puede realizarse fácilmente mediante:
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE,
                      FALSE,
                      0,
                      SPIF_SENDWININICHANGE
                     );				
este método funciona bien para terminar el protector de pantalla que se está ejecutando actualmente. Sin embargo, un problema que puede encontrar es que el sistema no reiniciará el protector de pantalla a menos que el usuario mueve el mouse o presiona una tecla. Si necesita el protector de pantalla para volver a iniciar, es necesario reinicializar el período de tiempo de espera. Para ello, mediante uno de los métodos siguientes:
  • Llamar a SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDWININICHANGE).
  • Utilizar SetCursorPos() para simular la entrada del usuario.
Ambos métodos hará que el sistema reiniciar el contador de tiempo de espera del protector de pantalla.

Propiedades

Id. de artículo: 140723 - Última revisión: jueves, 22 de febrero de 2007 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft Win32 Software Development Kit (SDK) 3.1 sobre las siguientes plataformas
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
Palabras clave: 
kbmt kbcode kbhowto kbscreensaver KB140723 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 140723

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com