2013-04-22 20 views
2

我有一個Python腳本,定期循環運行,對我的照明系統進行調整。當我關閉我的電腦時,我希望我的腳本能夠檢測到,並關掉燈。在Python中檢測計算機/程序關機?

如何檢測我的電腦開始在Python中關閉?或者,假設Windows向Python發送一個「關閉時間」的通知,我該如何攔截以殺死我的燈並退出循環?

+0

嗨Crummy,關於如何實際實現代碼的東西的問題屬於StackOverflow(管理員應該能夠遷移它)。 – 2013-04-22 07:14:34

回答

2

您應該對WM_ENDSESSION消息作出反應。

當用戶註銷或計算機關閉時發送此消息。

如果您想對Sleep/Hibernate做出反應,則需要使用PBT_APMSUSPEND來處理WM_POWERBROADCAST

但我不知道如何在python中做到這一點。我想這取決於你的窗口框架,因爲你需要一個窗口/消息循環來接收消息。

+0

感謝 - 你的評論讓我到http://stackoverflow.com/questions/1411186/python-windows-shutdown-events,我認爲這是我正在尋找的東西。感謝幫助! – Crummy 2013-04-22 16:25:50

7

這是在系統關閉時執行操作的錯誤方法。關機過程的作用是停止運行過程,然後關閉電源;如果您嘗試在程序中檢測到這種情況,並通過獲取最後一個動作來做出反應,則這是操作系統與您的程序之間的首次爭奪。更有可能的是,您的程序在設法執行必要的操作之前已經停止。

取而代之,您應該關閉正常協議來處理關機時的事務。這將告訴關閉實用程序發送一個明確的信號給你的程序,並等待它被確認,這給你足夠的時間(在合理的範圍內)做你必須做的事情。如何註冊通知因操作系統而異,所以這更多的是操作系統特定的問題,而不是Python的問題。