AppleScript为什么总是用Command命令发送击键?

时间:2011-07-05 14:31:30

标签: applescript

我看到很多像这样的AppleScript的例子

tell application "TextEdit"
    activate
    tell application "System Events"
        keystroke "s"
    end tell
end tell

预期结果是字母“s”将被输入到TextEdit中的活动文档中(假设至少有一个文档窗口)。但它总是试图保存文档(为更改的文档做了它,如果它是新的则打开保存对话框)。任何时候任何应用程序中的任何键都会发生同样的事情......

有人知道系统事件为什么总是发送“...使用{command down}”这样的击键?

4 个答案:

答案 0 :(得分:8)

我使用Cmd + R从AppleScript编辑器运行脚本,而不是单击“运行”按钮。在我按下“R”键之后脚本立即开始执行,并且该脚本在我释放Cmd或R之前发送击键“S”。这就是为什么发送按键“S”由TextEdit解释为修饰符Cmd。

解决方法是单击按钮运行或在脚本开头添加延迟并使用Cmd + R:

delay 0.2 -- 0.2 second delay is enough

tell application "TextEdit"
    activate

答案 1 :(得分:1)

你确定吗?使用您发布的确切代码,它在TextEdit中键入了字母s。您仍然必须使用key down {command}key up {command}进行保存(⌘命令 S )。
另外,如果在执行时按住⌘Command键,则在TextEdit中输入的命令将是⌘Command S

您可能需要查看有关WikiBooks的this文章,这可以帮助您更好地理解它。

答案 2 :(得分:1)

你是如何执行脚本的?如果您使用涉及Command键的键盘快捷键进行操作,则按住键而不是脚本。

答案 3 :(得分:1)

更好地检查它,并且只在必要时应用延迟,并且只要有必要。 (〜忙着等到用户做了cmd。我甚至使用了一些令人不安的声音来促进它,所以剧本实际上确实在某种程度上提升了。:D)

并且还特别注意到这种方式键序列无法变成命令,因为在cmd关闭时它不会触发。

on check()
    do shell script "~/Documents/checkModifierKeys cmd" --DOWNLOAD: http://macscripter.net/viewtopic.php?pid=114479#p114479
end check

on run {input, parameters}
    set the date_stamp to do shell script "date '+%Y.%m.%d_%H:%M'"
    repeat while check() = "1"
        beep
        delay 0.2
    end repeat
    tell application "System Events"
        tell process "TextEdit" to keystroke date_stamp
    end tell

    return input
end run

注意:我使用了downloaded的工具。我还找到了OsX应该具备的实用程序的参考资料,但在Lion上没有运气。但下载的一个肯定是有效的。