Obtenez l'événement de déconnexion à partir du système
Question
Je fais une application qui est utilisée pour effacer les fichiers temporaires, l'historique, etc., lorsque l'utilisateur se déconnecte. Alors, comment puis-je savoir si le système va se connecter (en C #)?
La solution
Il y a une propriété dans Environnement classe qui raconte si le processus d'arrêt a commencé:
Environment.HasShutDownStarted
Mais après quelques recherches sur Google, j'ai découvert que cela peut vous être utile:
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
}
}
Mais si vous voulez seulement effacer le fichier temporaire, je pense que la distinction entre la fermeture ou la déconnexion n'est d'aucune conséquence pour vous.
Autres conseils
Si vous avez spécifiquement besoin de l'événement de la connexion, vous pouvez modifier le code fourni dans la réponse de TheVillageIdiot comme suit:
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 tu as un Formulaire Windows, vous pouvez gérer le FormClosing
événement, puis vérifiez le e.CloseReason
Valeur d'énumération pour déterminer si elle est égale à CloseReason.WindowsShutDown
.
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.WindowsShutDown)
{
// Your code here
}
}