有没有办法检测电脑是否脱离睡眠模式



问题

我想用Python编写一个程序,当脚本检测到它已经脱离睡眠模式时,它就会执行这个程序。例如,我在用笔记本电脑。当我打开笔记本电脑时,脚本应该会运行。有没有一种方法可以检测到这一点,然后运行脚本?是否有监听此类事件的模块?


目标

最终目标是一种安全系统,如果用户的电脑被使用,就会向用户的手机发送警报。我对警报发送部分有一个想法,但我一开始就不知道如何触发程序。

基本格式应该如下所示:
if computer_active == True:
alert.send("Computer accessed")

显然,它看起来会比这更复杂,但这是一般的想法。

我在MacOSX v10.15.7 上运行Python3.10.0

非常感谢您的帮助

一个可能比没有更好的解决方案。它很粗糙,需要始终运行,不受事件驱动;但是:它很短,它是可配置的,它是便携式的:-(

'''
Idea: write every some seconds to a file and check regularly.
It is assumed that if the time delta is too big,
the computer just woke from sleep.
'''
import time
TSFILE="/tmp/lastts"
CHECK_INTERVAL=15
CHECK_DELTA = 7
def wake_up_from_sleep():
print("Do something")
def main():
while True:
curtime = time.time()
with open(TSFILE, "w") as fd:
fd.write("%d" % curtime)
time.sleep(CHECK_INTERVAL)
with open(TSFILE, "r") as fd:
old_ts = float(fd.read())
curtime = time.time()
if old_ts + CHECK_DELTA < curtime:
wake_up_from_sleep()
if __name__ == '__main__':
main()

这个问题很老了,但由于我在寻找同样的东西,我在网上没有找到任何东西。。。

import win32com.client
colMonitoredEvents = win32com.client.Dispatch("WbemScripting.SWbemLocator").ConnectServer(".", "rootcimv2").ExecNotificationQuery("Select * from Win32_PowerManagementEvent")
while True:
objLatestEvent = colMonitoredEvents.NextEvent()
if objLatestEvent.EventType == 7:
pass #do your stuff here

基于事件,以低CPU使用率无限期运行它,并在事件ID为7时执行任务;应该在进入睡眠时捕获事件4。请注意,对于事件4,操作应该非常迅速,否则很可能在电脑进入睡眠状态之前无法完成。

最新更新