J'ai découvert une information supplémentaire sur ce problème : lorsque l'on utilise la fonction keystroke
avec des nombres, les System Events les envoient toujours sous forme de ANSI_Keypad#
(code 82-92) au lieu de ce que l'on pourrait attendre d'un ANSI_#
caractères (code 18-29).
Pour la plupart des applications Mac, cela n'a pas d'importance car OS X lui-même ne se préoccupe pas (utilisation, support, etc.) de l'élément NUMLOCK
fonctionnent sur un clavier, les chiffres du clavier sont donc considérés comme les mêmes que ceux du clavier. Cependant, la fonction transmettra la valeur NUMLOCK
à l'application si vous disposez d'un clavier qui possède cette touche.
Il existe quelques applications qui surveillent la NUMLOCK
(par exemple, l'application VMware Fusion lors de l'exécution d'une VM Windows) et modifiera le comportement en fonction de la touche NUMLOCK
état.
Ainsi, par exemple, si l'AppleScript envoie keystroke "456"
à un NUMLOCK
application consciente.
- Si le
NUMLOCK
L'État est ON
, les chiffres "456" s'affichent.
- Si le
NUMLOCK
L'État est OFF
les clés équivalentes reçues sont Left Arrow
5
Right Arrow
Dans la question initiale, l'AppleScript envoyait abc 123
mais il est très probable que sa demande (qui n'a pas été mentionnée) ait été informée de l'existence de l'accord. NUMLOCK
qui est actuellement en cours d'exécution. OFF
et a donc exécuté les clés comme suit abc
[space]
End
Down Arrow
Page Down
J'ai créé une petite fonction AppleScript qui parcourt en boucle la chaîne donnée en envoyant key code
pour n'importe quel nombre et keystroke
pour tout autre caractère.
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)
Qui exécute ce qui suit
tell application "System Events"
keystroke "a"
keystroke "b"
keystroke "c"
keystroke " "
key code {18}
key code {19}
key code {20}
end tell
J'espère que cela vous aidera :)