Я работаю над приложением в стиле киоска, где мне нужно управлять выключением / перезапуском ПК при нажатии кнопки питания. Благодаря этому сообщению я прошел примерно 90% пути.
- На панели управления установите действие нажатия кнопки питания acpi для выключения.
- Прослушайте сообщение WndProc WM_QUERYENDSESSION
При получении выдают полностью недокументированные:
[DllImport("user32.dll", SetLastError = true)] static extern int CancelShutdown();
Вернитесь из WndProc и вызовите мое собственное окно сообщения с просьбой к пользователю выключить / перезапустить или отменить и ответить на их действие.
Все работает хорошо, если я запускаю / завершаю работу с панели задач (я могу выдавать тезисы так быстро, как хочу). Все тоже хорошо работает при первом нажатии на кнопку включения. При последующих нажатиях кнопки питания я вижу задержку в минуту или около того, прежде чем я получаю сообщение WM_QUERYENDSESSION.
Есть ли параметр или запись в реестре о том, как часто Windows будет выдавать событие ACPI? Я знаю, что дело не в оборудовании, потому что под Linux та же машина будет запускать событие ACPI так быстро, как я могу нажать кнопку.
Спасибо.