2008-09-29 6 views
7

Je souhaite être en mesure d'intercepter l'événement d'arrêt en C# pour Windows Vista. En raison des fonctionnalités de sécurité avancées de Vista, toutes les applications qui s'exécutent après l'appel de la commande shutdown sont arrêtées et affichées dans une liste, invitant l'utilisateur à faire quelque chose avec elles.Intercepter l'événement d'arrêt de Windows Vista en C#

Est-ce que quelqu'un sait comment surmonter cela et quels événements je dois utiliser dans Vista.

Merci.

Répondre

0
System.Environment.HasShutdownStarted 
+0

Il ne s'agit pas réellement d'un événement d'arrêt du système pour vista - c'est une propriété définie sur true sur n'importe quelle plate-forme lorsque votre domaine d'application est en cours de fermeture. –

+0

+1 pour vous, mais si HAdes voulait que l'application se ferme lorsque Windows se ferme pour ne pas apparaître dans la liste, cela devrait fonctionner. –

6

Vous pouvez utiliser l'objet application de WPF et vous abonner à son événement SessionEnding. Vous pouvez ensuite regarder l'énumération SessionEndingCancelEventArgs.ReasonSessionEnding pour déterminer exactement pourquoi la session se termine (LogOff ou Shutdown).

5

Ce que vous voulez peut-être regarder ici - Application Shutdown Changes in Windows Vista. Fondamentalement, pour ce que vous voulez, tout tourne autour de WM_QUERYENDSESSION. Notez que cela est exposé dans le framework .net - à la place, vous devrez utiliser des fonctions natives (p/invoke) et connecter le wndproc dans votre code pour répondre au message Windows.

Pour un exemple (indiquant une raison pour ne pas arrêter), vous pouvez voir Windows Vista - ShutdownBlockReasonCreate in C#.

0

Utilisez l'événement

Application.SessionEnding pour WPF.

0

Les événements SessionEnding/SessionEnded sur Microsoft.Win32.SystemEvents sont peut-être ce que vous recherchez.

Questions connexes