Во втором примере (в примерах) на этом link есть описание использования WM_QUERYENDSESSION для прекращения выключения. В нем также говорится, что это не работает в версиях окон позже XP. Это противоречит рекомендациям, приведенным по другому адресу question здесь, в stackoverflow. Каков правильный ответ? У меня нет компьютера, либо я не могу проверить.Как отменить выключение в Windows Vista и 7 программно?
ответ
Некоторые приложения получили обработку WM_QUERYENDSESSION неправильно (не переходя к DefWindowProc, они неправильно вернулись 0 несмотря на то, что они не намерены блокировать выключение) и поэтому MS изменил его с Vista, теперь нужно называть ShutdownBlockReasonCreate()
@ Konamiman: shutdown.exe -a прервет «запланированное» выключение да, но не «нормальное» выключение кем-то, вызывающим ExitWindowsEx()
Если что-то еще не удается, помните, что из командной строки это shutdown.exe -a
; возможно, вы могли бы использовать это, используя класс Process.
EDIT. При упоминании класса Process я с радостью предположил, что вопрос о программировании .NET, теперь я вижу, что .NET не упоминается ни в вопросе, ни в тегах. Во всяком случае, я считаю, что есть способы запуска исполняемых файлов из других программных сред.
Вы правы, что это возможность. Это похоже на хак, поэтому я надеялся на другие возможности. – David