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