我有一个循环运行的Python脚本,定期调整我的照明系统.当我关闭计算机时,我希望我的脚本检测到它,并完全关闭灯.
如何检测我的计算机开始在Python中关闭?
或者,假设Windows向Python发送"关闭时间"的通知,我如何拦截它以杀死我的灯并退出循环?
这是在系统关闭时执行操作的错误方法.关机过程的工作是停止运行进程然后关闭电源; 如果你试图从你的程序中发现这种情况并通过最后一次操作做出反应,那么它就是操作系统和你的程序之间的竞争.很可能你的程序在设法执行必要的操作之前就已经停止了.
相反,你应该在关机时挂钩正常的协议.这将告诉关闭实用程序向程序发送一个显式信号并等待它被确认,这给了你足够的时间(在合理范围内)做你必须做的事情.注册通知的准确程度因操作系统而异,因此这更像是一个特定于操作系统的问题,而不是一个Python问题.
您应该对该WM_ENDSESSION消息做出反应。
当用户注销或计算机关闭时发送此消息。
如果您还想对睡眠/休眠做出反应,则需要处理WM_POWERBROADCASTwith PBT_APMSUSPEND。
但我不知道如何在 python 中做到这一点。我想这取决于您的窗口框架,因为您需要有一个窗口/消息循环来接收消息。