已有添加桌面空间的脚本,如何编写关闭桌面的AppleScript?
桌面空间关闭功能实现说明
Mission Control 中用于删除桌面的关闭叉号并非常驻可见元素,只有当鼠标悬浮在对应桌面缩略图上时才会渲染展示,这也是直接用辅助功能检查器扫描找不到对应按钮属性的核心原因。
具体实现逻辑
- 保持原有唤起 Mission Control、进入 Dock 进程下空间列表层级的基础逻辑
- 定位到需要关闭的目标桌面元素,向元素发送悬浮触发信号,唤出隐藏的关闭按钮
- 匹配对应关闭按钮的 AX 描述完成点击,部分系统版本需要点击删除确认弹窗的对应按钮
- 操作完成后退出 Mission Control 界面
补全后的完整可运行脚本
on run -- 切换到对应功能的触发入口 my closeSpace() end run on openSpace() tell application "System Events" tell application "Mission Control" to launch tell group 2 of group 1 of group 1 of process "Dock" click (every button whose value of attribute "AXDescription" is "add desktop") tell list 1 set countSpaces to count of buttons delay 0.5 click button (countSpaces) end tell end tell end tell end openSpace on closeSpace() tell application "System Events" -- 等待Mission Control完全加载 tell application "Mission Control" to launch delay 0.8 tell group 2 of group 1 of group 1 of process "Dock" tell list 1 -- 默认定位最后一个新增的桌面,可根据需求调整元素序号 set targetSpace to last button -- 触发元素悬浮状态,唤出隐藏的关闭叉号 perform action "AXShowMenu" of targetSpace delay 0.3 -- 点击关闭按钮,不同系统版本可匹配对应的AXDescription文本 click (every button whose value of attribute "AXDescription" is "Close Desktop") end tell -- 处理系统弹出的删除确认弹窗 try click button "删除" of window 1 of process "Dock" end try end tell -- 退出Mission Control回到桌面 tell application "Mission Control" to quit end tell end closeSpace
调试注意点
- 延迟阈值需要根据设备性能调整,过短的等待时间会导致Mission Control未加载完成、元素找不到的报错
- 不同本地化语言、不同macOS版本的按钮AXDescription文本存在差异,如果点击无响应,可以打印当前列表下所有按钮的AX描述值做匹配
- 非悬浮状态下关闭按钮不会被注册到UI元素树中,直接扫描查找会出现找不到元素的情况,必须先触发悬浮交互
内容的提问来源于stack exchange,提问作者Jordan Farris
相关产品推荐
相关产品推荐

