Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mac Python关闭窗口_Python_Macos_User Interface_Automation_Window - Fatal编程技术网

Mac Python关闭窗口

Mac Python关闭窗口,python,macos,user-interface,automation,window,Python,Macos,User Interface,Automation,Window,我想知道是否有一种方法可以观察窗户的打开和何时关闭?我在我们的Mac系统上有一个非常烦人的VPN客户端,它非常冗长,非常烦人。没有任何配置可以改变这一点,所以我想知道我是否可以编写一个Python脚本,它总是在运行并监视窗口的打开和关闭 据我所知,没有在每次打开窗口时生成的全局通知,也没有每个应用程序使用的标准通知,也没有其他方法来实现这一点,除非(a)将代码注入VPN客户端,(b)使用不推荐的功能,如CGRemoteOperation,或(c)反向工程未记录的窗口服务器功能 因此,最简单的解决

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

据我所知,没有在每次打开窗口时生成的全局通知,也没有每个应用程序使用的标准通知,也没有其他方法来实现这一点,除非(a)将代码注入VPN客户端,(b)使用不推荐的功能,如
CGRemoteOperation
,或(c)反向工程未记录的窗口服务器功能

因此,最简单的解决方案是定期轮询窗口并关闭它们,可能通过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程序,在现有代理前面插入您自己的代理并截获相关消息并不难。

这听起来像是一个有趣的问题-cocoa解决方案涉及NSAppleEventManager,pyobjc-FWIW不支持