AppleScript按键忽略数字


6

一个非常简单的AppleScript,如下所示:

tell application "System Events"
    keystroke "abc 123"
end tell

导致只输入“abc”。在线资源表明情况并非如此。在按键之间添加延迟没有帮助。

可能导致此问题的原因或如何确定可能导致此问题的原因?

小问题:在AppleScript术语中,什么是击键?一个函数,命令,别的什么?


你有什么样的键盘。我能想到的唯一一件事就是数字锁定(虽然即使你确实拥有它也会让我感到惊讶会影响击键命令)
markhunte

我在MacBook Pro上,没有numlock。另外,我忘了提一下,有一段时间我有一个AppleScript,它是'按键'数字。
Praxeolitic

Answers:


6

看一下 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

对这个问题有好处,它听起来很有意义。我可以获得发送数字的密钥代码,但即使您发布的AppleScript也没有输入数字。
Praxeolitic

如果您发送'密钥代码{83}''密钥代码{84}''密钥代码{85}',它们是数字键,或18 19 20,这是字母上方的数字。
Tetsujin

我认为这是我在阅读你的答案和链接之后所做的,但老实说,此时我忘记了。这有点尴尬,但它奏效了。
Praxeolitic

tbh,我非常喜欢这项研究 - &我现在有一个很好的小应用程序会告诉我关键代码;-)
Tetsujin

3

我发现的有关此问题的更多信息是在使用时 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

希望这可以帮助 :)


1

作为@ 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上测试。


哦,是的,我还鼓励每个人在选中启用鼠标键时向Apple提交有关击键错误的反馈。我做到了。抱怨的人越多,他们修复它的可能性就越大。
hepcat72

0

你有没有检查鼠标键是否已启用(系统偏好设置 - >辅助功能 - >鼠标和触控板 - >启用鼠标键)?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.