Dvel
V2EX  ›  问与答

请问怎么监测 MacBook 合盖了,然后执行一个小脚本呀?

By Dvel at 2020 年 12 月 19 日 · 1931 次点击
import psutil

for pid in psutil.pids():
    name = psutil.Process(pid).name()
    if name == 'QQ jietu plugin' or name == 'QQ':
        print(pid, name)
        psutil.Process(pid).terminate()

比如这样一个小脚本,在合盖的时候执行一下,关掉 QQ 。
因为我无数次睡前忘了关掉 QQ,刚要睡着 QQ 就他妈响起了登录声。

第 1 条附言  ·  2020 年 12 月 19 日
解决了,brew 装了一个 sleepwatcher,这个可以在 sleep 和 wakeup 的时候执行一些脚本。
2 条回复  •  2020-12-19 02:19:08 +08:00
geelaw
   1
geelaw  
   2020 年 12 月 19 日 via iPhone
通常状况下合盖后会进入睡眠状态,我以为 macOS 进入睡眠之后 app 就不运行了?

可能 1 是程序阻止了睡眠,这样的话就不能检测睡眠事件(因为根本不发生)。
可能 2 是睡眠期间程序偶尔可以运行,此时可以检测即将睡眠的事件并进行操作。

另一种思路是检测目前有几个显示器,如果显示器的数目降低到 0 则执行程序。

不宜检测是否合盖,因为连接外置显示器、键鼠、电源时,合盖不应导致活动暂停。
ynyounuo
   2
ynyounuo  
   2020 年 12 月 19 日
ioreg -r -k AppleClamshellState
© 2026 V2EX · 31ms · 3.9.8.5