applescript 实现 macos 多应用协作的核心是通过 tell 块调用各 app 的 applescript 词典接口,配合 system events 处理 gui 操作,并可用 automator 或 osascript 集成落地。
applescript 控制 macos 应用间协作,核心在于让多个支持脚本化的 app 按顺序“说话”——一个发指令,另一个接收并执行,中间还能穿插系统操作或 shell 命令。这不是简单地挨个启动软件,而是构建有输入、处理、输出的闭环流程。
确认哪些 App 能互相配合
不是所有应用都能被 AppleScript 控制,更不是所有组合都天然兼容。关键看它们是否提供 AppleScript 词典(sdef):
- 打开“访达”,进入 /应用程序/实用工具,启动“脚本编辑器”
- 再开一个访达窗口,找到你想协调的应用(比如“Safari”“邮件”“自动操作”“终端”)
- 把该应用图标直接拖到“脚本编辑器”图标上 —— 若弹出词典窗口,说明它已开放接口,可查可用命令
- 常见可靠组合:Finder ↔ Safari ↔ Mail ↔ Numbers ↔ 自动操作 ↔ 终端 ↔ 系统事件(System Events)
用 tell 块串联不同应用
AppleScript 的 tell 语句是跨应用协作的主干。每个 tell 块只对指定应用生效,块之间可传递数据(如路径、文本、文件引用):
- 例如:从 Safari 获取当前网页标题,存为文本,再用 TextEdit 打开编辑:
-
tell application "Safari"
set pageTitle to name of front document
end tell
set tempPath to (path to desktop as text) & "page-title.txt"
do shell script "echo " & quoted form of pageTitle & " > " & quoted form of tempPath
tell application "TextEdit"
open file tempPath
end tell
用 System Events 补足 GUI 层交互
当目标应用不支持直接脚本控制(如某些第三方软件),或需点击菜单、输入文本、切换窗口时,System Events 是通用桥梁:
- 它能模拟按键(keystroke)、点击菜单栏、操作窗口控件、读取界面元素
- 例如:在 Chrome 中触发“导出为 PDF”(Chrome 本身脚本支持弱,但菜单路径固定):
tell application "System Events"
tell process "Google Chrome"
click menu item "导出为 PDF…" of menu "文件" of menu bar 1
end tell
end tell - 注意:首次使用需在“系统设置 → 隐私与安全性 → 辅助功能”中授权“脚本编辑器”或对应 App
通过 Automator 或 osascript 实现流程落地
写完协作逻辑后,得让它真正跑起来。两种最实用的集成方式:
-
嵌入 Automator 工作流程:新建“快速操作”,拖入“运行 AppleScript”,粘贴多应用脚本;保存后可在右键菜单、触控栏或快捷键中调用,支持接收选中文件/文本作为
input -
用 osascript 从终端驱动:适合定时任务(launchd)、Shell 脚本集成或远程触发。例如:
osascript ~/Scripts/safari-to-notes.scpt "https://example.com"
脚本内用item 1 of argv接收链接,再用 tell Safari 打开,tell Notes 新建页面粘贴











