Подтвердить что ты не робот

Как обнаружить выключение или выключение Windows

Мне нужно определить, когда Windows выключается (или перезапускается) или когда пользователь выходит из системы. Мне нужно закрыть приложение прежде, чем приложение будет закрыто. Я заметил, что событие закрытия приложения не возникает, когда Windows закрывает день.

Я прочитал сообщение Есть ли способ в С# для обнаружения выключения/выхода из системы Windows и отмены этого действия (после запроса пользователя)

но я не уверен, где я должен выполнить операции перед закрытием. Спасибо.

4b9b3361

Ответ 1

Прикрепите метод обработчика событий к событию SystemEvents.SessionEnding, и ваш метод обработчика будет вызван каждый раз, когда событие будет поднято. Обработка этого события позволит вам отменить ожидающий выход из системы или закрыть его, если хотите. (Хотя это фактически не работает, как это звучит в текущих операционных системах, для получения дополнительной информации см. Документацию здесь.)

Если вы не хотите отменять событие, но просто отреагируете на него соответствующим образом, вы должны обработать SystemEvents.SessionEnded событие.

Вы должны убедиться, что вы отключили обработчики событий, когда приложение закрыто, потому что оба они являются статическими событиями.

Ответ 2

Вы можете использовать собственное решение через pinvoke, если ваш код не работает в неинтерактивном сеансе (например, системная служба):

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