2

我想知道是否有办法观察窗户打开以及何时关闭?我在我们的 Mac 系统上有一个非常烦人的 VPN 客户端,它非常冗长而且非常烦人。没有配置可以改变这一点,所以我想知道是否可以编写一个始终运行并监视窗口打开和关闭的 Python 脚本?

4

1 回答 1

0

据我所知,每次打开窗口时都不会生成全局通知,也没有每个应用程序使用的标准通知,而且通常没有其他方法可以做到这一点,除非(a)将代码注入 VPN 客户端, (b) 使用不推荐使用的功能CGRemoteOperation,或 (c) 对未记录的 Window Server 功能进行逆向工程。

因此,最简单的解决方案是定期轮询窗口并关闭它们,可能通过 ScriptingBridge、NSAppleScript(通过 pyobjc)或 appscript 使用 UI 脚本。

例如:

se = appscript.app('SystemEvents')
while True:
    try:
        client = se.application_processes['Annoying VPN Client']
        window = client.windows['Annoying Window']
        close = window.buttons[1]
        close.click()
    except Exception as e:
        print('Exception: {}'.format(e))
    time.sleep(1)

如果您对其他选项感兴趣(无法通过 Python 实现),请告诉我。如果您熟悉系统级 C 和 ObjC 编程,那么创建一个挂钩到 ObjC 运行时的 SIMBL 程序以将您自己的委托插入现有委托并拦截相关消息并不难。

于 2013-06-04T22:04:35.403 回答