簡體   English   中英

如何控制電源鍵按下關機?

[英]How to control power button press shutdown?

我正在開發一個自助服務終端風格的應用程序,我需要在按下電源按鈕時控制 PC 的關機/重啟。 多虧了這篇文章,我已經完成了大約 90% 的工作。

  1. 在控制面板中將 acpi 電源按鈕按下動作設置為關機。
  2. 監聽 WndProc 消息 WM_QUERYENDSESSION
  3. 收到問題時,完全沒有記錄:

     [DllImport("user32.dll", SetLastError = true)] static extern int CancelShutdown();
  4. 從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM