電源ボタンが押されたときに PC のシャットダウン/再起動を制御する必要があるキオスク スタイルのアプリケーションに取り組んでいます。この投稿のおかげで、私はそこまでの道のりの約 90% を達成しています。
- コントロール パネルで、acpi 電源ボタンを押すアクションをシャットダウンに設定します。
- WndProc メッセージ WM_QUERYENDSESSION をリッスンします。
受け取ったときに、完全に文書化されていない問題が発生します。
[DllImport("user32.dll", SetLastError = true)] static extern int CancelShutdown();
WndProc から戻り、独自のメッセージ ボックスを表示して、ユーザーにシャットダウン/再起動またはキャンセルを求め、ユーザーのアクションに応答します。
タスクバーから起動/シャットダウンを行うと、すべてがうまく機能します(必要なだけ速く論文を発行できます)。電源ボタンを初めて押したときも、すべて正常に機能します。その後電源ボタンを押すと、WM_QUERYENDSESSION メッセージを受け取るまでに 1 分ほどの遅延が見られます。
Windows が ACPI イベントを発行する頻度に関する設定またはレジストリ エントリはありますか? Linuxでは、同じマシンがボタンを押すのと同じ速さでACPIイベントを発生させるため、ハードウェアではないことはわかっています。
ありがとう。