一个非常简单的AppleScript,如下所示:
tell application "System Events"
keystroke "abc 123"
end tell
导致只输入“abc”。在线资源表明情况并非如此。在按键之间添加延迟没有帮助。
可能导致此问题的原因或如何确定可能导致此问题的原因?
小问题:在AppleScript术语中,什么是击键?一个函数,命令,别的什么?
一个非常简单的AppleScript,如下所示:
tell application "System Events"
keystroke "abc 123"
end tell
导致只输入“abc”。在线资源表明情况并非如此。在按键之间添加延迟没有帮助。
可能导致此问题的原因或如何确定可能导致此问题的原因?
小问题:在AppleScript术语中,什么是击键?一个函数,命令,别的什么?
Answers:
看一下 https://stackoverflow.com/questions/18136567/applescript-keystroke-not-behaving-as-expected &安培; ANSI代码列表 如何在AppleScript中自动按键?
看来你不是唯一一个有这个问题的人。一个解决方案就是使用密钥代码......
tell application "System Events"
key code {18} using {command down}
这可能取决于您尝试将击键发送到哪个应用程序 - 我刚刚在文本编辑中使用已打开的空白文档进行测试
tell application "TextEdit" to activate
tell application "System Events"
keystroke "abc 123"
end tell
&安培;它按预期工作。
击键是脚本相当于实际按下那些/那些键[s]
怎么样...
tell application "TextEdit" to activate
tell application "System Events"
keystroke "abc"
keystroke space
keystroke "123"
end tell
我发现的有关此问题的更多信息是在使用时 keystroke
对于数字,系统事件始终将它们作为 ANSI_Keypad#
字符(代码82-92)而不是你可能期望的 ANSI_#
字符(代码18-29)。
对于大多数Mac应用程序而言,这并不重要,因为OS X本身并不关心(使用,支持等) NUMLOCK
键盘上的功能,因此键盘编号与键盘编号相同。但是,它会通过 NUMLOCK
如果您有一个具有此键的键盘/键盘,则按下该键。
有一些应用程序可以监控 NUMLOCK
密钥(例如,运行Windows VM时的VMware Fusion应用程序),并将根据更改行为 NUMLOCK
州。
例如,如果AppleScript发送 keystroke "456"
到了 NUMLOCK
意识到应用。
NUMLOCK
国家是 ON
,数字“456”将出现。 NUMLOCK
国家是 OFF
,收到的等效密钥是 Left Arrow
5
Right Arrow
在原始问题中,AppleScript已发送 abc 123
但很可能他的应用程序(未提及)知道了 NUMLOCK
国家,目前 OFF
,因此执行键作为 abc
[space]
End
Down Arrow
Page Down
我整理了一个AppleScript函数,循环遍历给定的字符串发送 key code
任何数字和命令的命令 keystroke
任何其他字符的命令。
on numberAsKeycode(theString)
tell application "System Events"
repeat with currentChar in (every character of theString)
set cID to id of currentChar
if ((cID ≥ 48) and (cID ≤ 57)) then
key code {item (cID - 47) of {29, 18, 19, 20, 21, 23, 22, 26, 28, 25}}
else
keystroke currentChar
end if
end repeat
end tell
end numberAsKeycode
set myString to "abc 123"
numberAsKeycode(myString)
执行以下操作
tell application "System Events"
keystroke "a"
keystroke "b"
keystroke "c"
keystroke " "
key code {18}
key code {19}
key code {20}
end tell
希望这可以帮助 :)
作为@ user271866,我遇到了这个问题并发现在系统偏好设置中检查了“启用鼠标键”,这会影响击键行为。
我有一个自动转发服务,我一直用来将搜索条件输入聚光灯和复制&粘贴结果。当我有一台新电脑时,我安装了这项服务。我记得在安装过程中也打开鼠标键,幸运的是,在我今天第一次在这台新电脑上运行服务之前,我的Magic Mouse 2电池已经死了,我用鼠标键来连接我的旧Magic Mouse。然后,当我尝试它时,我遇到了服务的不稳定行为。在预感中,我尝试禁用鼠标键并运行服务,它工作正常!它将数字与字符串的其余部分一起粘贴。
有一点需要注意的是,这不仅仅是数字。数字键盘上的其他字符(但不是全部)也不会被“键入” keystroke
。 .
和 /
也不会在提供给击键的字符串中工作。因此,我修改了@ Insomniac_Software的代码,为键击功能创建了一个可用的替换/包装器:
--This is a replacement for the keystroke function, which fails when "Enable Mouse Keys" is checked in System Preferences -> Accessibility -> Mouse & Trackpad. Keystroke will not "type out" any numbers, a dot ('.') or a slash ('/') that are in the supplied string when this option is enabled in System preferences. This method is safe to use whether that setting is checked or not. Call like this: my keystrokeForMouseKeys("your string")
on keystrokeForMouseKeys(theString)
tell application "System Events"
repeat with theChar in (every character of theString)
set theCode to id of theChar
if theCode is 44 then
key code 44
--Not sure why 46 (m) is what you get when you call id on "." but key code 47 types a "." and key code 46 types an 'm'...
else if theCode is 46 then
key code 47
else if ((theCode ≥ 48) and (theCode ≤ 57)) then
key code {item (theCode - 47) of {29, 18, 19, 20, 21, 23, 22, 26, 28, 25}}
else
keystroke theChar
end if
end repeat
end tell
end keystrokeForMouseKeys
现在,如果你打电话 my keystrokeForMouseKeys("./0123456789")
, 你得到:
./0123456789
在macOS High Sierra 10.13.6上测试。
你有没有检查鼠标键是否已启用(系统偏好设置 - >辅助功能 - >鼠标和触控板 - >启用鼠标键)?