Перехват события закрытия Windows Vista в C # - PullRequest
7 голосов
/ 29 сентября 2008

Я хочу иметь возможность перехватывать событие выключения в C # для Windows Vista. Благодаря расширенным функциям безопасности в Vista все приложения, работающие после вызова команды выключения, останавливаются и отображаются в списке, предлагая пользователю что-то с ними сделать.

Кто-нибудь знает, как преодолеть это и какие события мне нужно использовать в Vista.

Спасибо.

Ответы [ 5 ]

6 голосов
/ 29 сентября 2008

Вы можете использовать объект приложения WPF и подписаться на его событие SessionEnding. Затем вы можете просмотреть перечисление SessionEndingCancelEventArgs.ReasonSessionEnding , чтобы точно определить, почему сеанс заканчивается (LogOff или Shutdown).

5 голосов
/ 29 сентября 2008

То, на что вы можете посмотреть, находится здесь - Изменения завершения работы приложения в Windows Vista . По сути, все, что вы хотите, вращается вокруг WM_QUERYENDSESSION.

Обратите внимание, что это раскрывается в .net framework - вместо этого вам нужно будет использовать встроенные функции (p / invoke) и подключить wndproc в вашем коде для ответа на сообщение Windows.

В качестве примера (показывающего причину не завершать работу) вы можете увидеть Windows Vista - ShutdownBlockReasonCreate в C # .

0 голосов
/ 29 сентября 2008

События SessionEnding / SessionEnded в Microsoft.Win32.SystemEvents могут быть тем, что вы ищете.

0 голосов
/ 29 сентября 2008

Использовать событие

Application.SessionEnding для WPF.

0 голосов
/ 29 сентября 2008
System.Environment.HasShutdownStarted
...