2008-09-29 16 views
7

Quiero ser capaz de interceptar el evento de cierre en C# para Windows Vista. Debido a las funciones de seguridad avanzadas con Vista, todas las aplicaciones que se ejecutan después de que se invoca el comando de apagado se detienen y se muestran en una lista, lo que hace que el usuario haga algo con ellas.Interceptar el evento de cierre de Windows Vista en C#

¿Alguien sabe cómo superar esto y qué eventos necesito usar en Vista?

Gracias.

Respuesta

0
System.Environment.HasShutdownStarted 
+0

Esto no es en realidad un evento de apagado del sistema para vista: es una propiedad configurada en true en cualquier plataforma cuando se cierra tu dominio de aplicación. –

+0

+1 para usted, pero si HAdes deseaba que la aplicación se apagara cuando Windows se cierra para que no aparezca en la lista, esto debería funcionar. –

6

Puede usar el objeto de aplicación de WPF y suscribirse a su evento SessionEnding. A continuación, puede consultar la enumeración SessionEndingCancelEventArgs.ReasonSessionEnding para determinar exactamente por qué finaliza la sesión (LogOff o Shutdown).

5

Lo que es posible que desee ver aquí - Application Shutdown Changes in Windows Vista. Básicamente, para lo que quieras, todo gira en torno a WM_QUERYENDSESSION.

Tenga en cuenta que esto está expuesto en el .NET Framework - en su lugar, tendrá que utilizar funciones nativas (p/invoke) y enganchar el wndproc en su código para responder al mensaje de Windows.

Por un ejemplo (que muestra una razón para no cerrar), puede ver Windows Vista - ShutdownBlockReasonCreate in C#.

0

Uso caso

Application.SessionEnding para WPF.

0

Los eventos SessionEnding/SessionEnded en Microsoft.Win32.SystemEvents podrían ser lo que estás buscando.

Cuestiones relacionadas