Quando i tasti di scelta rapida sono attivi, come faccio a cliccare o spostare il mouse usando AppleScript?

6

Questo post suggerisce che il comando tell application “System Events” to key code 37 in AppleScript dovrebbe spostare il puntatore del mouse di un pixel verso il basso e verso sinistra se eseguito quando MouseKeys è abilitato. In OS X 10.7.2, tuttavia, ha l'effetto di generare una percentuale in minuscolo% co_de, e non di muovere il mouse affatto.

Allo stesso modo, avevo sperato che l avrebbe inviato un clic di controllo nel punto corrente del cursore del mouse, ma questo non sembra essere l'effetto.

Qualcuno sa come funziona su Lion a metà del 2011 MacBook Air per generare un click o control-click nella posizione corrente del mouse usando AppleScript? Va bene se si basa su MouseKeys e / o scripting dell'interfaccia utente.

Preferirei che non implicasse l'installazione di utility compilate da riga di comando, ma se tali utilità esistono e sono compatibili con Lion, è molto meglio di niente.

    
posta Daniel 12.02.2012 - 21:12
fonte

2 risposte

8

Ci sono tonnellate di utilità da riga di comando per fare ciò ... e io credo che fare questa rotta sia la soluzione migliore ... Un vantaggio? è che queste soluzioni dovrebbero funzionare, indipendentemente dal fatto che i "tasti del mouse" siano attivi o meno, giusto? Uno dei miei preferiti in particolare è cliclick

Cliclick” is short for "Command-Line Interface Click". > It is a a tiny shell / Terminal application that will emulate mouse clicks or series of mouse clicks (including doubleclicks and control-clicks) at arbitrary screen coordinates.

Hence, it is a tool for automating / scripting things that cannot otherwise be scripted (for instance, using AppleScript). Other than GUI Scripting, it does not require "Access for assistive devices" to be activated in the System Preferences.

Utilizzo:

$ cliclick c m

farà "control-clic" sulla posizione corrente del mouse, ma puoi anche specificare le coordinate, shift-click, doppio clic, ecc. Può anche restituire le coordinate del mouse con un argomento -q , e restituire il mouse nella posizione originale (quando si specificano le coordinate) con l'argomento -r .

Nel tuo caso .. Immagino che avresti solo ...

do shell script "cliclick c m"

da dentro il tuo AppleScript / Workflow / qualunque cosa ...

C'è un GRANDE post su questo argomento sul sito MacWorld ( née Mac OS X Suggerimenti ) - che ho raccolto lotti di buone informazioni da, nel corso degli anni. Se non ti interessa la mia risposta, sicuramente trovi una soluzione che ti piace, lì ... ci sono gli hack per far sorridere tutti - da un fanatico di Automator = a un cazzardo irriducibile.

Aggiornamento:

sembra essere in qualche modo - "farlo" in AppleScript .. ma sembra che tutti abbiano bisogno di sapere dove il tuo mouse è ... quale io supponi di no. Quindi in un gioco imbarazzante da nerd per qualche rappresentante ... Ho scritto questo ..

do shell script "python -c 'import sys, time; from Quartz.CoreGraphics import *;

def mouseEvent(type, posx, posy):
  theEvent = CGEventCreateMouseEvent(None, type, (posx,posy), kCGMouseButtonLeft);
  CGEventPost(kCGHIDEventTap, theEvent);

def mouseclickdn(posx,posy):
  mouseEvent(kCGEventLeftMouseDown, posx,posy);

def mouseclickup(posx,posy):
  mouseEvent(kCGEventLeftMouseUp, posx,posy);
  ourEvent = CGEventCreate(None);
  currentpos = CGEventGetLocation(ourEvent);
  print currentpos[0];
  print currentpos[1];
  mouseclickdn(currentpos.x, currentpos.y);
  mouseclickup(currentpos.x, currentpos.y)'
"

Che diavolo è?

  1. le chiamate AppleScript "fanno lo script di shell".
  2. Che poi chiama Python - con un argomento della riga di comando ( -c ) = che è stato fuggito e cajoled = per collaborare con A / S.
  3. Python quindi "importa" CoreGraphics / Quartz, ecc.
  4. E definisce alcuni metodi Cocoa-API / PyObjC per "trattare con" il mouse.
  5. Python "mostra" dove si trova il mouse.
  6. E clic! (giù, poi su)
  7. Come bonus, restituisce le coordinate del mouse, "se sei interessato_.

Funziona al 100% e non è nemmeno così lento. Spero vi piaccia!

Modifica:

Ecco il one-liner BASH, per i puristi / nemici dell'ha / s.

echo -e "import sys, time; from Quartz.CoreGraphics import *\ndef mouseEvent(type, posx, posy): theEvent = CGEventCreateMouseEvent(None, type, (posx,posy), kCGMouseButtonLeft); CGEventPost(kCGHIDEventTap, theEvent);\ndef mouseclickdn(posx,posy): mouseEvent(kCGEventLeftMouseDown, posx,posy);\ndef mouseclickup(posx,posy): mouseEvent(kCGEventLeftMouseUp, posx,posy);\nourEvent = CGEventCreate(None); currentpos = CGEventGetLocation(ourEvent); print currentpos[0]; print currentpos[1]; mouseclickdn(currentpos.x, currentpos.y);\nmouseclickup(currentpos.x, currentpos.y);" | python

    
risposta data 18.02.2012 - 22:01
fonte
0

Ecco lo script che uso per generare clic del mouse

tell application "System Events" to key code 88
tell application "System Events" to key code 87

A titolo di spiegazione ho scoperto che dovevo creare un piccolo movimento del mouse (88) prima che il clic del mouse (87) funzionasse in modo coerente. Questo dipende da MouseKeys.

    
risposta data 14.02.2012 - 21:15
fonte

Leggi altre domande sui tag