为什么AppleScript总是在命令关闭时发送击键?
我看到很多这样的AppleScript示例为什么AppleScript总是在命令关闭时发送击键?,applescript,Applescript,我看到很多这样的AppleScript示例 tell application "TextEdit" activate tell application "System Events" keystroke "s" end tell end tell 预期结果是字母“s”将在TextEdit中输入活动文档(假设至少有一个文档窗口)。但它总是尝试保存文档(对已更改的文档执行此操作,如果是新文档,则打开“保存”对话框)。任何应用程序中的任何密钥在任何时候都会发生
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你应该把你的评论作为一个答案发表,并接受它为正确的。它可能对其他人有用,就像对我一样。