在任何应用程序中通过 Automator 在 Applescript 中发送击键
Sending keystrokes in Applescript via Automator in any application
我在 Automator 中设置了一个 Applescript 快速操作以离开缩放会议。不管最前面是什么应用,我想看看zoom是不是运行,如果是,就离开会议。
set appName to "Zoom.us"
if application appName is running then
tell application id (id of application appName)
activate
end tell
tell application "System Events"
keystroke "w" using command down
keystroke tab
keystroke return
end tell
end if
有效!问题是,如果我在 zoom 会议中并且另一个应用程序在最前面,我必须从该应用程序的系统偏好设置中获得许可才能访问系统偏好设置。就像我在 Chrome 中一样,我必须允许 Chrome 发送击键。然后,Chrome 将始终有效。
我必须为每个可能的应用程序执行此操作。有没有一种方法可以在不通过大苏尔的安全措施的情况下在那里进行击键?我不介意将缩放放在首位。
使用 全局键盘快捷键 并保存 Automator workflows 时存在问题作为 Service/Quick 动作.
- 分配给 Service/Quick 操作 的 键盘快捷键 需要与默认 键盘不冲突shortcut 用于 application 在按下时 frontmost,否则可能会出现不需要的行为。
- 当键盘快捷键在Service/Quick Action 使用 UI Scripting 在 运行 AppleScript action 将需要为其授予 accessibility 权限(因为您已经发现了这一点,因此出现了问题)。
要解决 访问权限 问题,这里有三种方法可以实现我想到的目标。
第一个,我的首选方法 运行ning AppleScript scripts with a 键盘快捷键,是使用名为FastScripts的third-party应用程序,因为它不需要每个 application 是 frontmost,尚未被授予权限,将被授予 accessibility privileges to 运行 the AppleScript code 显示在您的问题中。我想象其他类似类型 third-party 应用程序 允许分配 键盘快捷键 和 运行 宁 script 也会绕过这个问题,但只测试了上述内容。
第二种方法,可以通过 Automator 作为 Service/Quick Action 使用 运行 Shell Script action,然后分配一个 keyboard shortcut 就可以了 应用程序 即 frontmost 键盘 application快捷方式被按下。
第三种方法,可以通过 Automator 作为 Service/Quick Action 使用 运行 AppleScript action 如果更改 zoom.us 默认首选项 zoom.us > 首选项... > 常规 通过取消选中 [] 让我确认当我离开会议时,然后当我分配了键盘快捷方式时,无需将辅助功能权限授予application 即 frontmost 当 keyboard shortcut 被按下时。
所有测试均在 macOS Big Sur 下使用 zoom.us 完成,(版本:5.4.7 (59780.1220))我的语言和地区设置在系统偏好设置设置为美式英语使用提供的各种方法。
方法一
第一种方法使用以下 example AppleScript code,在下面进一步展示,以及FastScripts 分配了 键盘快捷键 ⌃⌥⌘W 并按编码为我工作。
在系统偏好设置 > 安全与隐私 > 隐私 > 辅助功能 我添加并检查了以下内容:
- FastScripts
- 系统事件
然后 zoom.us 运行ning 和其他几个 applications frontmost 当按下 键盘快捷键 时,我不必向其他 应用程序 [=] 授予 访问权限 225=],zoom.us被带到前面关闭了.
示例 AppleScript 代码:
if application "zoom.us" is running then
tell application "zoom.us" to activate
delay 0.5
tell application "System Events" to ¬
tell application process "zoom.us"
keystroke "w" using command down
delay 0.5
key code 36
end tell
end if
注意测试目的,测试方法1后,我退出了FastScripts将由相同的 键盘快捷键 触发,该快捷键在测试接下来的两种方法时分配。
FastScripts 可以 运行 作为免费应用程序,最多 10 个键盘快捷键,或以 24.95 美元的价格升级以解锁无限的键盘快捷键。除了作为 FastScripts 的用户之外,我与 Red Sweater Software, LLC 没有任何关系。
方法二
第二种方法使用 Automator 和 Service/Quick 动作 进行了测试,设置为 Workflow 接收 [ [any application] 中没有输入] 使用 运行 Shell Script action 及其默认值设置和 f下面是 example shell script code 所使用的全部内容:
[[ -z $(pgrep -x 'zoom.us') ]] || pkill −x 'zoom.us'
在系统偏好设置 > 键盘 > 快捷方式 > 服务 我给它分配了键盘快捷键:⌃⌥⌘W
然后 zoom.us 运行ning 和其他几个 applications frontmost 当按下 键盘快捷键 时,我不必向其他 应用程序 [=] 授予 访问权限 225=]、zoom.us已关闭。
方法三
第三种方法使用 Automator 和 Service/Quick 动作 进行了测试,设置为 Workflow 接收 [在 [any application] 中没有输入] 使用 运行 AppleScript action 替换其默认值 code 仅包含以下 example AppleScript code:
tell application "zoom.us" to quit
在系统偏好设置 > 键盘 > 快捷方式 > 服务 我从 Service/Quick 操作中删除后,我为它分配了 键盘快捷键 ⌃⌥⌘W 在 方法 2.
中创建
然后 zoom.us 运行ning 和其他几个 applications frontmost 当按下 键盘快捷键 时,我不必向其他 应用程序授予 访问权限 、zoom.us已关闭。
这当然有效,因为[]离开会议时要求我确认首选项在zoom.us[的首选项中未选中=226=].
回顾一下,如果您不介意更改 zoom.us 中提到的默认首选项,那么 方法 3 可能是解决问题的最简单和最好的方法,因为它允许通过 方法 2 正常退出,不需要任何 third-party 应用程序 , 并且不需要授予任何 访问权限 或 zoom.us frontmost, 它刚刚好。
我首先提到了其他方法,因为方法一解决了 Automator 的 UI 脚本 问题和 Service/Quick Action,方法二使用 zoom.us.
中的默认设置
我在 Automator 中设置了一个 Applescript 快速操作以离开缩放会议。不管最前面是什么应用,我想看看zoom是不是运行,如果是,就离开会议。
set appName to "Zoom.us"
if application appName is running then
tell application id (id of application appName)
activate
end tell
tell application "System Events"
keystroke "w" using command down
keystroke tab
keystroke return
end tell
end if
有效!问题是,如果我在 zoom 会议中并且另一个应用程序在最前面,我必须从该应用程序的系统偏好设置中获得许可才能访问系统偏好设置。就像我在 Chrome 中一样,我必须允许 Chrome 发送击键。然后,Chrome 将始终有效。
我必须为每个可能的应用程序执行此操作。有没有一种方法可以在不通过大苏尔的安全措施的情况下在那里进行击键?我不介意将缩放放在首位。
使用 全局键盘快捷键 并保存 Automator workflows 时存在问题作为 Service/Quick 动作.
- 分配给 Service/Quick 操作 的 键盘快捷键 需要与默认 键盘不冲突shortcut 用于 application 在按下时 frontmost,否则可能会出现不需要的行为。
- 当键盘快捷键在Service/Quick Action 使用 UI Scripting 在 运行 AppleScript action 将需要为其授予 accessibility 权限(因为您已经发现了这一点,因此出现了问题)。
要解决 访问权限 问题,这里有三种方法可以实现我想到的目标。
第一个,我的首选方法 运行ning AppleScript scripts with a 键盘快捷键,是使用名为FastScripts的third-party应用程序,因为它不需要每个 application 是 frontmost,尚未被授予权限,将被授予 accessibility privileges to 运行 the AppleScript code 显示在您的问题中。我想象其他类似类型 third-party 应用程序 允许分配 键盘快捷键 和 运行 宁 script 也会绕过这个问题,但只测试了上述内容。
第二种方法,可以通过 Automator 作为 Service/Quick Action 使用 运行 Shell Script action,然后分配一个 keyboard shortcut 就可以了 应用程序 即 frontmost 键盘 application快捷方式被按下。
第三种方法,可以通过 Automator 作为 Service/Quick Action 使用 运行 AppleScript action 如果更改 zoom.us 默认首选项 zoom.us > 首选项... > 常规 通过取消选中 [] 让我确认当我离开会议时,然后当我分配了键盘快捷方式时,无需将辅助功能权限授予application 即 frontmost 当 keyboard shortcut 被按下时。
所有测试均在 macOS Big Sur 下使用 zoom.us 完成,(版本:5.4.7 (59780.1220))我的语言和地区设置在系统偏好设置设置为美式英语使用提供的各种方法。
方法一
第一种方法使用以下 example AppleScript code,在下面进一步展示,以及FastScripts 分配了 键盘快捷键 ⌃⌥⌘W 并按编码为我工作。
在系统偏好设置 > 安全与隐私 > 隐私 > 辅助功能 我添加并检查了以下内容:
- FastScripts
- 系统事件
然后 zoom.us 运行ning 和其他几个 applications frontmost 当按下 键盘快捷键 时,我不必向其他 应用程序 [=] 授予 访问权限 225=],zoom.us被带到前面关闭了.
示例 AppleScript 代码:
if application "zoom.us" is running then
tell application "zoom.us" to activate
delay 0.5
tell application "System Events" to ¬
tell application process "zoom.us"
keystroke "w" using command down
delay 0.5
key code 36
end tell
end if
注意测试目的,测试方法1后,我退出了FastScripts将由相同的 键盘快捷键 触发,该快捷键在测试接下来的两种方法时分配。
FastScripts 可以 运行 作为免费应用程序,最多 10 个键盘快捷键,或以 24.95 美元的价格升级以解锁无限的键盘快捷键。除了作为 FastScripts 的用户之外,我与 Red Sweater Software, LLC 没有任何关系。
方法二
第二种方法使用 Automator 和 Service/Quick 动作 进行了测试,设置为 Workflow 接收 [ [any application] 中没有输入] 使用 运行 Shell Script action 及其默认值设置和 f下面是 example shell script code 所使用的全部内容:
[[ -z $(pgrep -x 'zoom.us') ]] || pkill −x 'zoom.us'
在系统偏好设置 > 键盘 > 快捷方式 > 服务 我给它分配了键盘快捷键:⌃⌥⌘W
然后 zoom.us 运行ning 和其他几个 applications frontmost 当按下 键盘快捷键 时,我不必向其他 应用程序 [=] 授予 访问权限 225=]、zoom.us已关闭。
方法三
第三种方法使用 Automator 和 Service/Quick 动作 进行了测试,设置为 Workflow 接收 [在 [any application] 中没有输入] 使用 运行 AppleScript action 替换其默认值 code 仅包含以下 example AppleScript code:
tell application "zoom.us" to quit
在系统偏好设置 > 键盘 > 快捷方式 > 服务 我从 Service/Quick 操作中删除后,我为它分配了 键盘快捷键 ⌃⌥⌘W 在 方法 2.
中创建然后 zoom.us 运行ning 和其他几个 applications frontmost 当按下 键盘快捷键 时,我不必向其他 应用程序授予 访问权限 、zoom.us已关闭。
这当然有效,因为[]离开会议时要求我确认首选项在zoom.us[的首选项中未选中=226=].
回顾一下,如果您不介意更改 zoom.us 中提到的默认首选项,那么 方法 3 可能是解决问题的最简单和最好的方法,因为它允许通过 方法 2 正常退出,不需要任何 third-party 应用程序 , 并且不需要授予任何 访问权限 或 zoom.us frontmost, 它刚刚好。
我首先提到了其他方法,因为方法一解决了 Automator 的 UI 脚本 问题和 Service/Quick Action,方法二使用 zoom.us.
中的默认设置