Lorsque les touches souris sont activées, comment puis-je cliquer ou déplacer la souris à l'aide d'AppleScript?

6

Cet article suggère que la commande tell application “System Events” to key code 37dans AppleScript déplace le pointeur de la souris d’un pixel vers le bas et vers la gauche s’il est exécuté lorsque MouseKeys est activé. Sous OS X 10.7.2, toutefois, cela a pour effet de générer des minuscules let de ne pas déplacer la souris du tout.

De même, j'avais espéré tell application “System Events” to key code 34 using control downenvoyer un clic de contrôle au point actuel du curseur de la souris, mais cela ne semble pas être l'effet.

Est-ce que quelqu'un connaît une méthode qui fonctionne dans Lion sur un MacBook Air mi-2011 pour générer un clic ou un clic-droit sur l'emplacement actuel de la souris à l' aide d'AppleScript? Ce n'est pas grave si elle s'appuie sur MouseKeys et / ou les scripts de l'interface utilisateur.

Je préférerais que cela n'implique pas l'installation d'utilitaires de ligne de commande compilés, mais si de tels utilitaires existent et sont compatibles avec Lion, c'est bien mieux que rien.

Daniel
la source
Indique à l'application "Événements système" le code clé 88. Indique l'application "Événements système" au code clé 87. Ne fonctionne pas dans Filemaker Pro sur un champ. J'ai besoin de pouvoir générer un clic sur le champ actuel / le champ en surbrillance.

Réponses:

9

Il y a des tonnes d'utilitaires de ligne de commande pour le faire ... et je pense que choisir cette voie est votre meilleur pari ... Un avantage? est-ce que ces solutions devraient fonctionner, que les "touches de la souris" soient activées ou non, non? L' un de mes faves particulier est cliclick

Clic ”est l'abréviation de“ Command-Line Interface Click ”. > C’est une application shell / terminal minuscule qui émule des clics de souris ou une série de clics de souris (y compris des clics de souris et des clics de contrôle) à des coordonnées d’écran arbitraires.

Il s’agit donc d’un outil d’automatisation / de scriptage de choses qui ne pourraient pas être scriptées autrement (par exemple, en utilisant AppleScript). À l'exception des scripts d'interface graphique, il n'est pas nécessaire d'activer l'option "Accès pour appareils d'assistance" dans les Préférences Système.

Usage:

$ cliclick c m

"Ctrl-clic" sur l'emplacement actuel de la souris, mais vous pouvez également spécifier les coordonnées, Shift-clic, double-clic, etc. Il peut également renvoyer les coordonnées de la souris avec un -qargument et ramener la souris à l'emplacement d'origine. (lors de la spécification des coordonnées) avec l' -rargument.

Dans ton cas, je suppose que tu voudrais juste ...

do shell script "cliclick c m"

depuis votre AppleScript / Workflow / peu importe ...

Un excellent article à ce sujet sur le site de MacWorld ( né de Mac OS X Hints ) - sur lequel j'ai glané de nombreuses bonnes informations au fil des ans. Si vous ne vous souciez pas de ma réponse, vous trouverez sûrement une solution qui vous plaira, là ... il y a des astuces à faire sourire tout le monde - d'un monstre Automator = à un C grincheux.

Mise à jour:

Il semble y avoir des moyens - de le "faire" dans AppleScript .. mais ils semblent tous exiger de savoir où se trouve votre souris ... ce qui, je suppose, ne vous convient pas. Donc, dans un jeu ringard pour un représentant embarrassant ... J'ai écrit ceci ..

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)'
"

Qu'est-ce que c'est?

  1. AppleScript appelle 'do shell script'.
  2. Ce qui appelle ensuite Python - avec un argument de ligne de commande ( -c) = qui a été échappé et cajoled = pour coopérer avec A / S.
  3. Python "importe" CoreGraphics / Quartz, etc.
  4. Et définit certaines méthodes Cocoa-API / PyObjC pour "traiter" la souris.
  5. Python "détermine" où se trouve la souris.
  6. Et des clics! (en bas, puis en haut)
  7. En prime, il renvoie les coordonnées de la souris, «si cela vous intéressait».

Fonctionne à 100% et n'est même pas si lent. J'espère que vous aimez!

Modifier:

Voici le BASH one-liner, pour les puristes / haineux A / 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

alex grey
la source
Python! Wow, je n'avais pas pensé à ça. J'ai hâte d'essayer cela. Si je suis / Gauche / Droite / g, sera-ce un clic droit?
Daniel
Oui, il vous suffit d’échanger leftavec rightTWO kCGEvents. Vous pouvez également le déplacer avec quelque chose qui ressemble àdef mousemove(posx,posy): mouseEvent(kCGEventMouseMoved, posx,posy);
alex grey
C'est la meilleure dépense de 100 représentants que j'ai jamais faite. Merveilleuse, merveilleuse réponse. +125 (10 pour le vote positif, 15 pour l'acceptation et 100 pour la prime).
Daniel
@ alexgray J'ai fait quelques corrections de formatage / blancs pour ce poste, principalement pour des raisons de santé mentale. À ma connaissance, il est toujours correct du point de vue de la syntaxe pour python. Si ce n'est pas le cas, cliquez sur rollback sur la page d'historique des modifications .
Jason Salaz
@Jason Salaz Vous avez probablement raison .. La raison pour laquelle il était si fou, c'est qu'avant de "traduire cela en Applescript ... je l'avais testé en tant que BASH one-liner .. Je vais éditer le post pour montrer également cette implémentation pour les personnes qui préfèrent utiliser les outils UNIX traditionnels comme script par rapport à AppleScript
alex grey
0

Voici le script que j'utilise pour générer des clics de souris

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

En guise d’explication, j’ai trouvé que je devais créer un petit mouvement de souris (88) avant que le clic de souris (87) fonctionne de manière cohérente. Cela repose sur MouseKeys.

Deltanovember
la source
Quel type de clavier avez-vous connecté à votre machine? Quelle version d'OS? Cela ne fonctionne pas pour moi sur un MacBook Air fonctionnant avec Lion.
Daniel