[英]How to control power button press shutdown?
我正在開發一個自助服務終端風格的應用程序,我需要在按下電源按鈕時控制 PC 的關機/重啟。 多虧了這篇文章,我已經完成了大約 90% 的工作。
收到問題時,完全沒有記錄:
[DllImport("user32.dll", SetLastError = true)] static extern int CancelShutdown();
從 WndProc 返回並顯示我自己的消息框,要求用戶關閉/重新啟動或取消,並響應他們的操作。
如果我從任務欄開始/關閉,一切都會很好(我可以按我想要的速度發布論文)。 我第一次按下電源按鈕時,一切都運行良好。 在隨后按下電源按鈕時,雖然在收到 WM_QUERYENDSESSION 消息之前我看到了大約一分鍾左右的延遲。
是否有關於 Windows 多久發出一次 ACPI 事件的設置或注冊表項? 我知道這不是硬件,因為在 linux 下,同一台機器會以我按下按鈕的速度觸發 ACPI 事件。
謝謝。
在工作中尋求幫助,我能夠將這個問題直接提交給 Microsoft 支持。 在我的第三個支持工程師那里,我基本上被告知這在應用程序級別是不可能的。 他認為調用未記錄的CancelShutdown()
“混淆”電源管理器或 acpi 驅動程序,從而導致WM_QUERYENDSESSION
消息延遲。 由於CancelShutdown()
沒有記錄,MS 不願意進一步調查。
那么,你如何掛鈎電源按鈕按下? 您需要編寫一個設備驅動程序,特別是ACPI Filter Driver 。 我們現在正在調查此事。
我認為這是不可能的,除非您與硬件制造商交談或硬連線啟動按鈕,以便它不會向處理此問題的硬件發送信號。 你只能延遲它,但我猜即使那樣也不能給你 100% 的保證。
Windows 8.1 將(可能)帶來 Kiosk 模式。 也許這就是你要找的 ;-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.