Altre informazioni su questo problema che ho scoperto è che quando si utilizza keystroke
con numeri, gli eventi di sistema li inviano sempre come ANSI_Keypad#
caratteri (codice 82-92) invece di quanto ci si potrebbe aspettare in ANSI_#
caratteri (codice 18-29).
Per la maggior parte delle applicazioni Mac, questo non ha importanza in quanto a OS X non interessa (utilizzare, supporto, ecc.) la funzione NUMLOCK
su una tastiera, quindi i numeri della tastiera sono visti come i numeri della tastiera. Tuttavia, passerà il NUMLOCK
keypress all'applicazione se si dispone di una tastiera / tastiera con questa chiave.
Ci sono alcune applicazioni che monitorano la chiave NUMLOCK
(ad esempio, l'applicazione VMware Fusion quando si esegue una macchina virtuale Windows) e cambieranno il comportamento in base allo stato NUMLOCK
.
Quindi, ad esempio, se AppleScript invia keystroke "456"
a un'applicazione NUMLOCK
aware.
- Se lo stato di
NUMLOCK
è ON
, verranno visualizzati i numeri "456".
- Se lo stato di
NUMLOCK
è OFF
, le chiavi equivalenti ricevute sono Left Arrow
5
Right Arrow
Nella domanda originale, AppleScript ha inviato abc 123
ma molto probabilmente la sua applicazione (che non è stata menzionata) era a conoscenza dello stato NUMLOCK
, che era attualmente OFF
, e quindi eseguito le chiavi come abc
[space]
End
Down Arrow
Page Down
Metto insieme una piccola funzione AppleScript che scorre nella stringa data inviando key code
comandi per qualsiasi numero e keystroke
comandi per qualsiasi altro carattere.
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)
Che esegue il seguente
tell application "System Events"
keystroke "a"
keystroke "b"
keystroke "c"
keystroke " "
key code {18}
key code {19}
key code {20}
end tell
Spero che questo aiuti:)