我有一个Python脚本,它执行一项特定任务,然后休眠4小时。该任务是关闭每4小时弹出的一个窗口。
我的电脑连续运行时,脚本运作得很好。但在Windows休眠和唤醒后,它就会失败。我发现当Windows进入睡眠状态时,睡眠计时器不会运行,而是会从Windows进入睡眠状态时停止的地方继续计时。问题在于,当Windows从睡眠状态中被唤醒时,这个窗口弹出来了,我希望我的脚本可以自动关闭它。
例如:假设这个窗口在23:00弹出来,我的脚本关闭了窗口并进入了睡眠状态。现在在23:30,Windows进入了睡眠状态。睡眠计时器停止了30分钟。假设在06:00,我把Windows唤醒,应该被关闭的那个窗口出现了,但我的脚本计时器从30分钟开始,并且需要再过3.5小时才能关闭这个窗口。
一个我想到的解决方法是检查实际的睡眠时间和唤醒时间,然后比较这两个时间以确定是否已经过去了4小时。但这需要我的脚本知道Windows何时进入睡眠状态和何时唤醒,这可以通过使用Windows关机事件来实现,尽管我无法想出如何使用它。我看到了这个问题,但我无法弄清楚如何在我的情况下使用它,也不能在运行时使其工作。我添加了一个日志以记录关闭发生的时间,但该日志从未打印过。在我的情况下,Windows进入睡眠状态时,我需要侦听
另一种可行的解决方法是将睡眠时间设置为1秒,这也可以解决问题,但我想知道是否有其他解决办法,可以保持计时器为4小时,并且仍然能让我的脚本正常工作。
有没有解决方案可以修复我的想法,在其中可以获取Windows睡眠时间和唤醒时间,或者其他可以使用的解决方案? 注意:我无法停止窗口每4小时弹出一次,因为我没有权限停止触发窗口弹出的PowerShell脚本。此外,我的Python脚本在启动电脑时自动启动,并包含4个线程,用于完成一些小任务。关闭窗口的脚本是其中之一。我的脚本使用Visual Basic脚本在后台运行。
while(True):
if (is_window_open()):
close_window()
time.sleep(4*3600) #The timer is actually a little less than 4 hours
time.sleep(1)
我的电脑连续运行时,脚本运作得很好。但在Windows休眠和唤醒后,它就会失败。我发现当Windows进入睡眠状态时,睡眠计时器不会运行,而是会从Windows进入睡眠状态时停止的地方继续计时。问题在于,当Windows从睡眠状态中被唤醒时,这个窗口弹出来了,我希望我的脚本可以自动关闭它。
例如:假设这个窗口在23:00弹出来,我的脚本关闭了窗口并进入了睡眠状态。现在在23:30,Windows进入了睡眠状态。睡眠计时器停止了30分钟。假设在06:00,我把Windows唤醒,应该被关闭的那个窗口出现了,但我的脚本计时器从30分钟开始,并且需要再过3.5小时才能关闭这个窗口。
一个我想到的解决方法是检查实际的睡眠时间和唤醒时间,然后比较这两个时间以确定是否已经过去了4小时。但这需要我的脚本知道Windows何时进入睡眠状态和何时唤醒,这可以通过使用Windows关机事件来实现,尽管我无法想出如何使用它。我看到了这个问题,但我无法弄清楚如何在我的情况下使用它,也不能在运行时使其工作。我添加了一个日志以记录关闭发生的时间,但该日志从未打印过。在我的情况下,Windows进入睡眠状态时,我需要侦听
WM_POWERBROADCAST
和PBT_APMSUSPEND
,但这似乎也无法正常工作。(我认为这可能是因为我的脚本在后台运行)另一种可行的解决方法是将睡眠时间设置为1秒,这也可以解决问题,但我想知道是否有其他解决办法,可以保持计时器为4小时,并且仍然能让我的脚本正常工作。
有没有解决方案可以修复我的想法,在其中可以获取Windows睡眠时间和唤醒时间,或者其他可以使用的解决方案? 注意:我无法停止窗口每4小时弹出一次,因为我没有权限停止触发窗口弹出的PowerShell脚本。此外,我的Python脚本在启动电脑时自动启动,并包含4个线程,用于完成一些小任务。关闭窗口的脚本是其中之一。我的脚本使用Visual Basic脚本在后台运行。
Set WshShell = CreateObject("WScript.Shell" )
WshShell.Run chr(34) & "D:\scripts\script.bat" & Chr(34), 0
Set WshShell = Nothing
script.bat
只是启动了 Python 脚本。
编辑:我使用 pygetwindow
模块来检查窗口是否打开并关闭它。