Quando as teclas para mouse estão ativadas, como clico ou movo o mouse usando o AppleScript?

6

Esta postagem sugere que o comando tell application “System Events” to key code 37no AppleScript deve mover o ponteiro do mouse um pixel para baixo e para a esquerda, se executado quando as teclas para mouse estiverem ativadas. No OS X 10.7.2, no entanto, ele tem o efeito de gerar uma minúscula le não mover o mouse.

Da mesma forma, eu esperava que tell application “System Events” to key code 34 using control downtivesse enviado um clique de controle no ponto atual do cursor do mouse, mas esse não parece ser o efeito.

Alguém sabe uma maneira que funciona no Lion em um MacBook Air de meados de 2011 para gerar um clique ou clicar com o controle na localização atual do mouse usando o AppleScript? Não há problema se ele se basear em roteiros de mouse e / ou scripts de interface do usuário.

Eu preferiria que não envolvesse a instalação de utilitários de linha de comando compilados, mas se esses utilitários existirem e forem compatíveis com o Lion, isso é muito melhor do que nada.

Daniel
fonte
diga ao aplicativo "System Events" para o código de chave 88 informar ao aplicativo "System Events" para o código de chave 87 Não funciona quando no Filemaker Pro em um campo. Eu preciso ser capaz de gerar um clique no campo atual / campo realçado.

Respostas:

9

toneladas de utilitários de linha de comando para fazer isso ... e eu acho que essa rota é a sua melhor aposta ... Um benefício? é que essas soluções devem funcionar, independentemente de as "teclas do mouse" estarem ou não ativadas, certo? Um dos meus favoritos é cliclick

Cliclick ”é a abreviação de“ Command-Line Interface Click ”. > É uma pequena aplicação shell / terminal que emula os cliques do mouse ou uma série de cliques do mouse (incluindo cliques duplos e cliques de controle) em coordenadas arbitrárias da tela.

Portanto, é uma ferramenta para automatizar / criar scripts de coisas que não podem ser roteirizadas (por exemplo, usando o AppleScript). Diferentemente da GUI Scripting, não requer que o "Access for assistive devices" seja ativado nas Preferências do Sistema.

Uso:

$ cliclick c m

irá "control-click" o local atual do mouse, mas você também pode especificar as coordenadas, shift-click, clique duplo, etc. Ele também pode retornar as coordenadas do mouse com um -qargumento e retornar o mouse ao local original (quando especificar coordenadas) com o -rargumento.

No seu caso .. Eu acho que você acabou de ...

do shell script "cliclick c m"

de dentro do seu AppleScript / Workflow / whatever ...

Há um ótimo post sobre este assunto no site da MacWorld ( née Mac OS X Hints ) - que eu adquiri muitas informações boas, ao longo dos anos. Se você não se importa com a minha resposta, certamente encontrará uma solução que você gosta, há ... hacks para fazer todos sorrirem - de uma aberração do Automator a um obstinado C maluco.

Atualizar:

parecem ser algumas maneiras - com "fazê-lo" no AppleScript .. mas todos eles parecem exigir saber onde o mouse é ... que eu suponho que você não. Então, em um jogo embaraçosamente nerd para algum rep ... eu escrevi isso ..

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

Que diabos é isso?

  1. O AppleScript chama 'do shell script'.
  2. O que então chama Python - com um argumento de linha de comando ( -c) = que foi escapado e cajoled = para cooperar com A / S.
  3. Python então "importa" CoreGraphics / Quartz, etc.
  4. E define alguns métodos Cocoa-API / PyObjC para "lidar com" o mouse.
  5. Python "descobre" onde o mouse está.
  6. E clica! (abaixo, depois para cima)
  7. Como bônus, ele retorna as coordenadas do mouse, 'se você estava interessado'.

Funciona 100% e nem é tão lento. Espero que você goste!

Editar:

Aqui está o BASH one-liner, para os puristas / A / S haters.

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 cinza
fonte
Python! Uau, eu não tinha pensado nisso. Estou ansioso para experimentar isso. Se eu sou / Esquerda / Direita / g, clique direito?
Daniel
Sim, você só precisa trocar leftcom rightnos dois kCGEvents. Você também pode movê-lo com algo semelhante adef mousemove(posx,posy): mouseEvent(kCGEventMouseMoved, posx,posy);
alex cinza
Este é o melhor gasto de 100 repetições que já fiz. Resposta maravilhosa e maravilhosa. +125 (10 para o upvote, 15 para o accept e 100 para o bounty).
Daniel
@alexgray Fiz algumas correções de formatação / espaço em branco para este post, principalmente para sanidade. Até onde eu saiba, ainda é sintaticamente correto para python. Se esse não for o caso, clique em reverter na página do histórico de edições .
Jason Salaz
@Jason Salaz Você provavelmente está certo .. A razão pela qual foi tão louco é que antes de "traduzir isso para Applescript ... eu tinha testado como um one-liner BASH .. Vou editar o post para mostrar também que implementação para as pessoas que preferem script via ferramentas tradicionais UNIX vs. AppleScript
alex cinza
0

Aqui está o script que eu uso para gerar cliques do mouse

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

A título de explicação, descobri que precisava criar um pequeno movimento do mouse (88) antes que o clique do mouse (87) funcionasse consistentemente. Isso depende de MouseKeys.

deltanovember
fonte
Que tipo de teclado você anexou à sua máquina? Qual versão do sistema operacional? Isso não funciona para mim em um MacBook Air executando o Lion.
Daniel