关于任务控制:Applescript 按键未按预期运行

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 的新手。我已经尝试过这个命令的许多变体,包括将 control down package在花括号中并将对 "System Events" 的调用package在对 "Finder" 的调用中,就像这样

1
2
3
4
5
tell application"Finder"
    tell application"System Events"
        keystroke"1" using control down
    end tell
end tell

但输出完全一样,视图没有变化。我想我在这里遗漏了一些东西......

根据这个问题的回答,我尝试添加延迟以确保我不会在使用 CMD-r 运行脚本时踩到自己的脚,但没有任何反应。当您尝试单击重要的焦点窗口时,我会听到声音效果(如果这有意义的话),它是一声短促的哔哔声。我是否与应用程序交谈不当?

编辑

好的,我有一些工作,但我有点困惑为什么会这样。

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
结束告诉