В Windows C ++ или C # вы можете спросить у ОС, в данный момент она выключается / перезапускается / выходит из системы

У меня проблема, которая возникает во время выключения. У меня есть кусок кода, написанный на C ++, который обернут в .dll и внедрен в другие приложения. Он делает кучу вещей, включая запуск другого приложения (сервера), написанного на C #.

Однако после запуска выключения код c ++ запускает приложение C #, потому что оно было остановлено выключением, которое быстро завершается сбоем, потому что система собирается завершить работу.

Затем окно ошибки останавливает выключение, пока пользователь не справится с этим, что раздражает. Есть ли способ спросить у ОС: «Эй, ты выключаешься / перезагружаешься / выходишь из системы?» так я не запускаю приложение, пока это происходит? Я полагаю, что решение на любом конце будет в порядке.

== РЕДАКТИРОВАТЬ ==

Для немного большего уточнения. Код, который работает как внедренный .dll, не может предполагать, что приложение, в которое он внедрен, имеет какое-либо «окно». Кроме того, я хотел бы что-то, что я мог бы запросить, а не событие, которое я должен слушать, потому что я могу пропустить это событие из-за времени. Мне интересно, есть ли какая-нибудь функция, которая бы эффективно дала мне что-то вроде этого

bool IsSystemShutting();

И в этом отношении опция C # будет работать для меня так же, как опция C ++. Но в .NET Framework SystemEvents.SessionEnding а также SystemEvents.SessionEnded оба события против свойств. Очень часто случается так, что я подписываюсь на это событие ПОСЛЕ того, как событие произошло, поэтому я не имею на это никакого права.

6

Решение

WM_ENDSESSION а также WM_QUERYENDSESSION сообщения предназначены для этого сценария. Windows отправит эти оконные сообщения окну, когда инициируется процесс выключения, перезапуска или выхода из системы.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]