Tasto AppleScript che ignora i numeri

6

Un AppleScript molto semplice come questo:

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

si traduce semplicemente nella digitazione di "abc". Le risorse online suggeriscono che questo non dovrebbe essere il caso. L'aggiunta di un ritardo tra i tasti non ha aiutato.

Che cosa potrebbe causare questo o come posso determinare che cosa potrebbe causare questo?

Piccola domanda: nella terminologia di AppleScript, qual è il battito? Una funzione, comando, qualcos'altro?

    
posta Praxeolitic 24.08.2014 - 08:22
fonte

4 risposte

6

Dai un'occhiata a link & la lista dei codici ANSI a Come automatizzare la pressione di un tasto in AppleScript?

Sembra che tu non sia l'unico con il problema. Una soluzione era quella di usare il codice chiave invece ...

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

Può dipendere dall'app a cui stai tentando di inviare le sequenze di tasti - Ho appena provato con un documento vuoto già aperto in Modifica testo usando

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

& ha funzionato come previsto.

Un tasto è l'equivalente in formato script di premere effettivamente quelle / quelle [s]

Che dire di ...

tell application "TextEdit" to activate
tell application "System Events"
    keystroke "abc"
    keystroke space
    keystroke "123"
end tell
    
risposta data 24.08.2014 - 08:38
fonte
3

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

    
risposta data 17.02.2016 - 20:51
fonte
1

Come @ user271866, stavo avendo questo problema e ho scoperto che era "Abilita chiavi del mouse" controllato in Preferenze di Sistema che stava influenzando il comportamento della sequenza di tasti.

Avevo un servizio di automazione che stavo usando per inserire i termini di ricerca in riflettori e copiare & incolla il risultato. Quando ho avuto un nuovo computer, ho installato il servizio. Mi sono ricordato di aver acceso anche i tasti del mouse durante l'installazione e, per fortuna, prima di eseguire il servizio oggi su questo nuovo computer, la mia batteria del Magic Mouse 2 è morta e ho usato i tasti del mouse per collegare il mio vecchio Magic Mouse. Ho poi riscontrato un comportamento irregolare dal servizio quando l'ho provato. Su un sospetto, ho provato a disabilitare i tasti del mouse e ad eseguire il servizio e ha funzionato! Ha incollato i numeri insieme al resto della stringa.

Una cosa da notare è che non si tratta solo di numeri. Anche altri caratteri sul tastierino numerico (ma non tutti) non verranno "digitati" da keystroke . . e / inoltre non funzioneranno in una stringa fornita alla sequenza di tasti. Ho quindi modificato il codice di @ Insomniac_Software per creare un sostituto / wrapper funzionante per la funzione di battitura:

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

Ora, se chiami my keystrokeForMouseKeys("./0123456789") , ottieni:

./0123456789

Testato su macOS High Sierra 10.13.6.

    
risposta data 06.09.2018 - 18:03
fonte
0

hai controllato se i tasti del mouse sono abilitati (Preferenze di Sistema - > Accessibilità - > Mouse & Trackpad - > Abilita tasti del mouse)?

    
risposta data 12.01.2018 - 11:20
fonte

Leggi altre domande sui tag