Cela peut être fait en utilisant rmlogotest.exe
outil. Voir le lien suivant :
https://superuser.com/questions/959364/on-Windows-how-can-i-gracefully-ask-a-running-program-to-terminate#1154058
Si vous utilisez WPF, vous pouvez alors gérer un événement supplémentaire :
Application.SessionEnding += Application_SessionEnding;
où vous pouvez définir e.Cancel = true;
pour pouvoir interrompre la fermeture de l'application.
Je pense rmlogotest.exe
utilise un délai d'attente de 5 secondes, puis il vous dira que LOGO Validation FAILED
.
Si vous mettez une sorte de boîte de message de confirmation dans votre application - vous obtenez un échec car pour l'utilisateur final, cela prendra probablement plus de 5 secondes pour répondre.
Je suppose que du point de vue de Windows, si 5 secondes se sont écoulées, il veut redémarrer de toute façon - et si l'utilisateur final n'a pas sauvegardé son document / travail - alors Windows s'attend à le copier ailleurs peut-être.
De mon point de vue (en tant que développeur d'applications), il est acceptable d'avoir des défaillances. LOGO Validation FAILED
L'utilisateur peut décider de lui-même s'il va tuer mon application après 5 secondes et perdre son document ou s'il va sauvegarder le document et fermer mon application manuellement.
Si vous devez diffuser WM_QUERYENDSESSION
il doit alors être envoyé via SendMessage
à toutes les fenêtres du processus en cours. Un exemple de code de démarrage peut être trouvé ici :
https:/
Mais il n'envoie que WM_ENDSESSION
vous devez utiliser WM_QUERYENDSESSION
à la place et ajoute l'énumération Windows du processus donné.
Liens connexes :