为什么AppleScript总是在命令关闭时发送击键?

为什么AppleScript总是在命令关闭时发送击键?,applescript,Applescript,我看到很多这样的AppleScript示例 tell application "TextEdit" activate tell application "System Events" keystroke "s" end tell end tell 预期结果是字母“s”将在TextEdit中输入活动文档(假设至少有一个文档窗口)。但它总是尝试保存文档(对已更改的文档执行此操作,如果是新文档,则打开“保存”对话框)。任何应用程序中的任何密钥在任何时候都会发生

我看到很多这样的AppleScript示例

tell application "TextEdit"
    activate
    tell application "System Events"
        keystroke "s"
    end tell
end tell
预期结果是字母“s”将在TextEdit中输入活动文档(假设至少有一个文档窗口)。但它总是尝试保存文档(对已更改的文档执行此操作,如果是新文档,则打开“保存”对话框)。任何应用程序中的任何密钥在任何时候都会发生相同的情况


有人知道为什么系统事件总是发送类似“…使用{command down}”的按键吗?

你确定吗?使用您发布的确切代码,它在文本编辑中键入字母
s
。您仍然需要使用
键向下{command}
键向上{command}
进行保存(⌘ 命令(S)。
另外,如果您持有⌘ 命令键向下执行时,文本编辑中输入的命令将⌘ 指挥部


您可能想看看WikiBooks上的文章,这将帮助您更好地理解它。

您是如何执行脚本的?如果使用包含命令键的键盘快捷键执行此操作,则按住的是键,而不是脚本。

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

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

delay 0.2 -- 0.2 second delay is enough

tell application "TextEdit"
    activate

更好的办法是检查它,只有在必要时才延迟,并且只要有必要。 (~Busy等待用户执行cmd up。我甚至使用了一些令人不安的声音来简化它,因此脚本实际上以某种方式执行cmd up。: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

注意:我使用了一个我想要的工具。我还发现OsX应该具有的实用程序的引用,但在Lion上没有运气。但下载的脚本确实有效。

我运行与上面发布的脚本完全相同的脚本,并且我得到了Cmd+S…我意外地发现了问题:我使用Cmd+R从AppleScript编辑器运行脚本,而不是单击run按钮。命令修饰符会干扰文本编辑上下文中的击键“s”!谢谢你的帮助reply@Andrew你应该把你的评论作为一个答案发表,并接受它为正确的。它可能对其他人有用,就像对我一样。