This post suggests that the command tell application “System Events” to key code 37
in AppleScript should move the mouse pointer one pixel down and to the left if run when MouseKeys are enabled. In OS X 10.7.2, however, it has the effect of generating a lowercase l
, and not moving the mouse at all.
Similarly, I had hoped tell application “System Events” to key code 34 using control down
would sent a control click at the current point of the mouse cursor, but that does not seem to be the effect.
Does anyone know a way that works in Lion on a mid-2011 MacBook Air to generate a click or control-click at the current mouse location using AppleScript? It is okay if it relies on MouseKeys and/or UI scripting.
I would prefer if it did not involve installing compiled command line utilities, but if such utilities exist and are Lion compatible, that is far better than nothing.
Best Answer
There are tons of command line utilities to do this... and I'd reckon that going this route's your best bet... One benefit? is that these solutions should work, irrespective of whether or not "mouse keys" are on, right? One of my particular faves is cliclick
Usage:
will "control-click" the current mouse location, but you can also specify the coordinates, shift-click, double-click, etc. It can also return the coordinates of the mouse with a
-q
argument, and return the mouse to the original location (when specifying coordinates) with the-r
argument.In your case.. I guess you'd just...
do shell script "cliclick c m"
from inside your AppleScript / Workflow / whatever...
There's a GREAT post on this subject on MacWorld's site (née Mac OS X Hints) - that I've gleaned lots of good info from, over the years. If you don't care for my answer you will surely find a solution you DO like, there... there's hacks to make everyone smile - from an Automator freak = to a grumpy C diehard.
Update:
There do seem to be some ways - to "do it" in AppleScript.. but they all seem to require knowing where your mouse is... which i assume you don't. So in an embarrassingly nerdy play for some rep... I wrote this..
What the hell is it?
-c
) = that's been escaped and cajoled = to cooperate with A/S.Works 100% and isn't even THAT slow. Hope you like it!
Edit:
Here is the BASH one-liner, for purists / 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