Как прервать выключение в Windows Vista и 7 программно? - PullRequest
1 голос
/ 15 декабря 2009

Во втором примере (в разделе примеров) по этой ссылке есть описание использования WM_QUERYENDSESSION для отмены завершения работы. В нем также говорится, что это не работает на версиях Windows, более поздних, чем XP. Это противоречит совету, данным по другому вопросу здесь в stackoverflow. Какой правильный ответ? У меня нет компьютера, на котором я могу выполнить тестирование.

Ответы [ 2 ]

2 голосов
/ 15 декабря 2009

Некоторые приложения неправильно обрабатывали WM_QUERYENDSESSION (не передавая DefWindowProc, они неверно возвращали 0, даже если они не собирались блокировать выключение), и поэтому MS изменила его в Vista, теперь вам нужно вызвать ShutdownBlockReasonCreate ()

@ Konamiman: shutdown.exe -a прервет «запланированное» отключение, но не «нормальное» отключение кем-то, вызывающим ExitWindowsEx ()

2 голосов
/ 15 декабря 2009

Если что-то еще не удалось, помните, что из командной строки это shutdown.exe -a; возможно, вы могли бы вызвать это, используя класс Process .

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

...