2009-12-15 4 views
1

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

ответ

2

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

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

2

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

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

+0

Вы правы, что это возможность. Это похоже на хак, поэтому я надеялся на другие возможности. – David