Applescript击键不符合预期

时间:2013-08-08 21:35:04

标签: applescript mission-control

我第一次尝试使用Applescript,并且正在尝试构建一个脚本来设置应用程序的默认布局以便在工作中进行开发。这涉及将应用程序放在多个任务控制空间中。我手边的问题只是在空间上移动。我在许多类似的帖子中发现,可以用

实现这样的行动
tell application "System Events"
    tell process "Finder"
        keystroke "1" using control down
    end tell
end tell

如果适当的密钥绑定到位。我更改了首选项,因此我可以使用control + 1移动到第一个MC空间。但是,运行脚本不会执行任何操作。这是事件日志输出:

tell application "System Events"
    keystroke "1" using control down
end tell

没有我能看到的错误,但是再次:Applescript的新手。我尝试了这个命令的许多变体,包括在花括号中包裹control down并在"System Events"的调用中将调用包装到"Finder"这样

tell application "Finder"
    tell application "System Events"
        keystroke "1" using control down
    end tell
end tell

但输出完全相同,视图中没有移位。我想我在这里错过了什么...

根据this question的回复,我尝试添加一段延迟,以确保我没有自己踩着CMD-r运行脚本,但没有任何反应。当你试图从一个重要的焦点窗口中点击时听到声音效果(如果这有任何意义),它会发出一声短促的哔哔声。我是不正确地与应用程序对话?

修改

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

tell application "Finder"
    activate
    delay 0.2
    tell application "System Events" to keystroke "a" using control down
end tell

这实现了我的需要,但我必须将密钥绑定更改为一个字母。当Applescript Editor处于活动状态时,我可以通过按Ctrl + 1来复制错误音。我猜有一个使用键组合的AE的快捷方式。但是,当Finder应该处于活动状态时,为什么会运行呢?

4 个答案:

答案 0 :(得分:2)

要回答您的问题,在您的工作代码中,区别在于您在发出keystroke命令之前激活Finder。按键命令始终发送到最前面的应用程序,因此您必须始终确保首先激活应用程序。

如果control-1不起作用,那么我怀疑某个Finder命令使用该组合或某个其他应用程序在全局上下文中使用它意味着无论哪个应用程序位于最前端,它都会拦截该命令。否则它应该适合你。

最后,我将从Finder tell代码块中删除您的系统事件代码行。告诉Finder告诉系统事件执行命令是没有理由的。只需在“结束告诉”行之后将该行单独放置。

祝你好运。

答案 1 :(得分:1)

我刚刚使用过这个 - 我不想在触发应该是全局快捷方式之前激活finder。击键无效,但我尝试了密钥代码,确实有效:

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

答案 2 :(得分:0)

这应该有效:

告诉应用程序" Finder"
    激活
告诉你     延迟0.2
    告诉应用程序"系统事件"
密码18使用{control down}
结束告诉

答案 3 :(得分:0)

我发现这个工具是一个很好的替代品,没有这个问题。

安装很简单:

brew install socsieng/tap/sendkeys

用法:

sendkeys send --initial-delay 0 --delay 0.001 --characters 'Hello'

https://github.com/socsieng/sendkeys

相关问题