ループ内で定期的に実行され、照明システムを調整する Python スクリプトがあります。コンピューターをシャットダウンするときに、スクリプトでそれを検出して、ライトを完全にオフにしたいと考えています。
Python でコンピュータがシャットダウンし始めたことを検出するにはどうすればよいですか?
または、Windows が Python に「シャットダウンする時間」の通知を送信すると仮定すると、それを傍受してライトを停止し、ループを終了するにはどうすればよいでしょうか?
これは、システムのシャットダウン時にアクションを実行するための間違った方法です。シャットダウン プロセスの役割は、実行中のプロセスを停止し、電源をオフにすることです。プログラム内からこれを検出し、最後のアクションを取得して対応しようとすると、OS とプログラムの間で最初に実行する競争になります。必要なアクションを実行する前に、プログラムが停止される可能性が高くなります。
代わりに、シャットダウン時に処理を行うための通常のプロトコルにフックする必要があります。これにより、シャットダウン ユーティリティは明示的なシグナルをプログラムに送信し、それが確認されるのを待つように指示されます。これにより、(妥当な範囲内で) 必要なことを行うのに十分な時間が与えられます。通知を受け取るために正確に登録する方法は OS によって異なるため、これは Python の問題ではなく、OS 固有の問題です。
メッセージに反応する必要がありWM_ENDSESSION
ます。
このメッセージは、ユーザーがログオフしたとき、またはコンピューターがシャットダウンしたときに送信されます。
スリープ/休止状態にも対応したい場合は、 で処理する必要がありWM_POWERBROADCAST
ますPBT_APMSUSPEND
。
しかし、Pythonでそれを行う方法がわかりません。メッセージを受信するにはウィンドウ/メッセージループが必要なので、ウィンドウフレームワークに依存すると思います。