Obtener el evento de cierre de sesión del sistema
Pregunta
Estoy haciendo una aplicación que se utiliza para borrar los archivos TEMP, el historial, etc., cuando el usuario inicia sesión. Entonces, ¿cómo puedo saber si el sistema va a iniciar sesión (en C#)?
Solución
Hay una propiedad en Ambiente clase que cuenta sobre si el proceso de cierre ha comenzado:
Environment.HasShutDownStarted
Pero después de buscar en Google descubrí que esto puede ser de ayuda para usted:
using Microsoft.Win32;
//during init of your application bind to this event
SystemEvents.SessionEnding +=
new SessionEndingEventHandler(SystemEvents_SessionEnding);
void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
if (Environment.HasShutdownStarted)
{
//Tackle Shutdown
}
else
{
//Tackle log off
}
}
Pero si solo desea borrar el archivo TEMP, entonces creo que distinguir entre el cierre o el cierre de sesión no es de ninguna consecuencia para usted.
Otros consejos
Si necesita específicamente el evento de inicio de sesión, puede modificar el código proporcionado en la respuesta de TheVillageIdiot de la siguiente manera:
using Microsoft.Win32;
//during init of your application bind to this event
SystemEvents.SessionEnding +=
new SessionEndingEventHandler(SystemEvents_SessionEnding);
void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
if (e.Reason == SessionEndReasons.Logoff)
{
// insert your code here
}
}
Si tienes un Formulario de Windows, puedes manejar el FormClosing
evento, luego revise el e.CloseReason
valor de enumación para determinar si es igual a CloseReason.WindowsShutDown
.
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.WindowsShutDown)
{
// Your code here
}
}