Tecla de AppleScript ignorando números

6

Un AppleScript muy simple como este:

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

hace que solo se escriba "abc". Los recursos en línea sugieren que este no debería ser el caso. La adición de un retraso entre las pulsaciones de teclas no ayudó.

¿Qué podría estar causando esto o cómo puedo determinar qué podría estar causando esto?

Pequeña pregunta lateral: en la terminología de AppleScript, ¿qué es la pulsación de tecla? Una función, comando, ¿algo más?

    
pregunta Praxeolitic 24.08.2014 - 08:22

4 respuestas

6

Echa un vistazo a enlace & la lista de códigos ANSI en ¿Cómo automatizo una pulsación de tecla en AppleScript?

Parece que no eres el único con el problema. Una solución allí fue utilizar el código clave en su lugar ...

tell application "System Events"
    key code {18} using {command down}

Puede depender de la aplicación a la que intenta enviar las pulsaciones de teclas. Acabo de probar con un documento en blanco ya abierto en Edición de texto usando

tell application "TextEdit" to activate
tell application "System Events"
    keystroke "abc 123"
end tell

& funcionó como se esperaba.

Una pulsación de tecla es el equivalente a un script de presionar que / esas teclas [s]

¿Qué tal ...?

tell application "TextEdit" to activate
tell application "System Events"
    keystroke "abc"
    keystroke space
    keystroke "123"
end tell
    
respondido por el Tetsujin 24.08.2014 - 08:38
3

Más información sobre este problema que he descubierto es que cuando uso keystroke con números, los Eventos del Sistema siempre los envían como ANSI_Keypad# caracteres (código 82-92) en lugar de lo que podría esperar como ANSI_# caracteres (código 18-29).

Para la mayoría de las aplicaciones de Mac, esto no importa ya que OS X no se preocupa (uso, soporte, etc.) de la función NUMLOCK en un teclado, por lo que los números del teclado se ven igual que los números del teclado. Sin embargo, pasará la tecla NUMLOCK a la aplicación si tiene un teclado / teclado que tenga esta tecla.

Hay algunas aplicaciones que monitorean la clave NUMLOCK (por ejemplo, la aplicación VMware Fusion cuando se ejecuta una máquina virtual de Windows) y cambiarán el comportamiento en función del estado NUMLOCK .

Así, por ejemplo, si AppleScript envía keystroke "456" a una aplicación que tiene en cuenta NUMLOCK .

  • Si el estado NUMLOCK es ON , aparecerán los números "456".
  • Si el estado NUMLOCK es OFF , las claves equivalentes recibidas son Left Arrow 5 Right Arrow

En la pregunta original, AppleScript envió abc 123 pero lo más probable es que su aplicación (que no se mencionó) era consciente del estado NUMLOCK , que actualmente era OFF , y por lo tanto ejecutó las claves como abc [space] End Down Arrow Page Down

Reuní una pequeña función AppleScript que recorre la cadena dada enviando comandos key code para cualquier número y comandos keystroke para cualquier otro personaje.

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)

Que ejecuta lo siguiente

tell application "System Events"
  keystroke "a"
  keystroke "b"
  keystroke "c"
  keystroke " "
  key code {18}
  key code {19}
  key code {20}
end tell

Espero que esto ayude :)

    
respondido por el Insomniac Software 17.02.2016 - 20:51
1

Como @ user271866, estaba teniendo este problema y descubrí que se estaba verificando "Habilitar las teclas del mouse" en Preferencias del sistema que estaba afectando el comportamiento de las teclas.

Tenía un servicio de automatización que había estado usando para ingresar los términos de búsqueda en Spotlight y copiar & pega el resultado. Cuando conseguí una computadora nueva, instalé el servicio. Recordé también haber activado las teclas del mouse durante la configuración y, como me gustaría que fuera así, antes de ejecutar el servicio hoy en esta nueva computadora, mi batería del Magic Mouse 2 se agotó y usé las teclas del mouse para conectar mi antiguo Magic Mouse. Entonces me encontré con un comportamiento errático del servicio cuando lo probé. En una corazonada, intenté desactivar las teclas del mouse y ejecutar el servicio, ¡y funcionó! Pegó los números junto con el resto de la cadena.

Una cosa a tener en cuenta es que no son solo números. Otros caracteres en el teclado numérico (pero no todos) tampoco se "tipearán" por keystroke . . y / tampoco funcionarán en una cadena suministrada a la pulsación de tecla. Por lo tanto, modifiqué el código de @ Insomniac_Software para crear un reemplazo / contenedor de trabajo para la función de pulsación de tecla:

--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

Ahora, si llama a my keystrokeForMouseKeys("./0123456789") , obtiene:

./0123456789

Probado en macOS High Sierra 10.13.6.

    
respondido por el hepcat72 06.09.2018 - 18:03
0

¿ha comprobado si las teclas del mouse están habilitadas (Preferencias del sistema - > Accesibilidad - > Mouse & Trackpad - > Habilitar las teclas del mouse)?

    
respondido por el user271866 12.01.2018 - 11:20

Lea otras preguntas en las etiquetas