Applescript keystroke not behaving as expected
我是第一次尝试使用 Applescript,并且正在尝试构建一个脚本来设置我在工作中开发的应用程序的默认布局。这涉及将应用程序放置在多个任务控制空间中。我手头的问题只是在空间中移动。我在许多与此类似的帖子中发现,可以使用
来实现这样的操作
1 2 3 4 5 | tell application"System Events" tell process"Finder" keystroke"1" using control down end tell end tell |
是否有适当的键绑定。我更改了首选项,因此我可以使用控件 1 移动到第一个 MC 空间。但是,运行脚本不会做任何事情。这是事件日志输出:
1 2 3 | tell application"System Events" keystroke"1" using control down end tell |
我看不到任何错误,但又是:Applescript 的新手。我已经尝试过这个命令的许多变体,包括将
1 2 3 4 5 | tell application"Finder" tell application"System Events" keystroke"1" using control down end tell end tell |
但输出完全一样,视图没有变化。我想我在这里遗漏了一些东西......
根据这个问题的回答,我尝试添加延迟以确保我不会在使用
编辑
好的,我有一些工作,但我有点困惑为什么会这样。
1 2 3 4 5 | tell application"Finder" activate delay 0.2 tell application"System Events" to keystroke"a" using control down end tell |
这完成了我所需要的,但我必须将键绑定更改为一个字母。当 Applescript Editor 处于活动状态时,我可以通过按 control 1 来复制错误音调。我想AE有一个使用组合键的快捷方式。但是为什么在 Finder 应该处于活动状态时运行呢?
我一直在处理这个问题——我不想在触发应该是全局快捷方式之前激活 finder。击键不起作用,但是我尝试了键码,确实有效:
1 2 3 4 5 6 | on run {} tell application"System Events" key code {18} using {command down} end tell return"success" end run |
这个问题有一个关键代码列表:https://apple.stackexchange.com/questions/36943/how-do-i-automate-a-key-press-in-applescript
要回答您的问题,在您的工作代码中,不同之处在于您在发出击键命令之前激活 Finder。按键命令始终发送到最前面的应用程序,因此您必须始终确保首先激活应用程序。
如果 control-1 不起作用,那么我怀疑某些 Finder 命令使用该组合,或者某些其他应用程序在全局上下文中使用该组合,这意味着无论哪个应用程序在最前面,它都会拦截该命令。否则它应该适合你。
最后,我将从 Finder 告诉代码块中删除您的系统事件代码行。没有理由告诉 Finder 告诉系统事件执行命令。只需将该行单独放在"结束说明"行之后即可。
祝你好运。
我发现这个工具是一个没有这个问题的好选择。
安装很简单:
1 | brew install socsieng/tap/sendkeys |
用法:
1 | sendkeys send --initial-delay 0 --delay 0.001 --characters 'Hello' |
https://github.com/socsieng/sendkeys
这应该可以工作:
告诉应用程序"Finder"
启用
结束告诉
延迟 0.2
告诉应用程序"系统事件"
使用 {control down} 键码 18
结束告诉