web-dev-qa-db-fra.com

Comment détecter l'arrêt ou la déconnexion de Windows

Je dois détecter quand Windows est arrêté (ou redémarré) ou lorsque l'utilisateur se déconnecte. Je dois fermer correctement l'application avant la fermeture de l'application. J'ai remarqué qu'aucun événement d'application de sortie n'est déclenché lorsque Windows ferme le jour.

J'ai lu le post Existe-t-il un moyen en c # pour détecter un arrêt/déconnexion de Windows et annuler cette action (après avoir demandé à l'utilisateur)

mais je ne sais pas où je dois effectuer les opérations avant de fermer. Merci.

47
Andrea Nagar

Attachez une méthode de gestionnaire d'événements à SystemEvents.SessionEnding event , et votre méthode de gestionnaire sera appelée chaque fois que l'événement est déclenché. La gestion de cet événement vous permettra d'annuler la fermeture de session en attente ou de l'arrêter, si vous le souhaitez. (Bien que cela ne fonctionne pas comme dans les systèmes d'exploitation actuels; pour plus d'informations, consultez la documentation MSDN ici .)

Si vous ne voulez pas annuler l'événement, mais réagissez simplement de manière appropriée, vous devez gérer le SystemEvents.SessionEnded événement à la place.

Vous devez vous assurer que vous détachez vos gestionnaires d'événements lorsque l'application est fermée, car ces deux événements sont statiques.

55
Cody Gray

Vous pouvez utiliser une solution native via pinvoke si votre code ne s'exécute pas dans une session non interactive (comme un service système):

//SM_SHUTTINGDOWN = 0x2000
bool bShutDownPending = GetSystemMetrics(SM_SHUTTINGDOWN) != 0;
9
c00000fd