2010-02-16 4 views
0

J'ai une petite application avec une fenêtre qui écoute le message WM_QUERYENDSESSION et retourne FALSE - qui devrait indiquer à Windows que je ne veux pas qu'elle s'arrête (voir this MSDN link). Ce que j'ai trouvé est que même si je demande à Windows de ne pas arrêter, et que Windows n'est pas en train de s'éteindre, il envoie toujours le message WM_ENDSESSION et ferme d'autres applications qui s'exécutent à côté de la mienne.Pourquoi les autres applications sont-elles encore arrêtées même lorsque je renvoie FALSE au message WM_QUERYENDSESSION?

Est-ce que quelqu'un sait pourquoi cela se produit et que peut-on faire pour que mon application empêche également d'autres applications de s'arrêter?

Répondre

3

J'ai trouvé que l'ordre dans lequel je lance mon application et d'autres applications sur le système affecte ceux qui sont arrêtés et ceux qui ne le sont pas. Un peu plus de recherche a découvert un appel système SetProcessShutdownParameters(). En utilisant cet appel, je peux placer mon application en tête de la liste des processus à interroger sur l'arrêt de Windows et empêcher ainsi les autres applications d'obtenir le message WM_ENDSESSION.

Donc, pour résumer:

Lorsqu'un événement d'arrêt se produit (arrêt, redémarrage ou déconnecter), Windows envoie un message WM_QUERYENDSESSION à chaque application à son tour.

Si une application ne s'oppose pas à l'arrêt (ils retournent TRUE), un message WM_ENDSESSION leur est alors envoyé.

Dès qu'une application renvoie la valeur FALSE à WM_QUERYENDSESSION, l'arrêt est annulé et aucun autre message n'est envoyé.

1

S'il vous plaît regarder dans cet article msdn: http://msdn.microsoft.com/en-us/library/aa376890(VS.85).aspx

Fondamentalement, cela dépend vraiment de ce que chaque application faire avec le WM_QUERYENDSESSION et les messages WM_ENDSESSION. Comme indiqué dans l'article ci-dessus, les messages WM_ENDSESSION sont envoyés quel que soit le résultat des messages WM_QUERYENDSESSION. De nombreuses applications décident d'arrêter quel que soit le résultat.

Il y a aussi de nombreuses applications qui commencent leur processus d'arrêt juste après avoir reçu le WM_QUERYENDSESSION de leur donner plus de temps à l'arrêt avant la redoutée « cette application ne répond pas ... » dialogue

L'espoir que cela clarifie les choses un peu

Questions connexes