Not a question - just posting here in case it’s useful to someone.
I needed the ability to click and drag for UI scripting.
System Events only lets you click at a location.
Applescript Toolbox can be script-embedded, avoiding user installation, but can’t click and drag.
MouseTools and ClickClick should both do what I need, but need to be installed on each user’s computer.
So here’s a solution that just uses included Python:
on mouseDrag(xDown, yDown, xUp, yUp, delayTime) -- delayTime because the drag may fail if the UI isn't fast enough without a delay. For what I do, .1 works. do shell script " /usr/bin/python <<END from Quartz.CoreGraphics import CGEventCreateMouseEvent from Quartz.CoreGraphics import CGEventCreate from Quartz.CoreGraphics import CGEventPost from Quartz.CoreGraphics import kCGEventLeftMouseDown from Quartz.CoreGraphics import kCGEventLeftMouseUp from Quartz.CoreGraphics import kCGMouseButtonLeft from Quartz.CoreGraphics import kCGHIDEventTap from Quartz.CoreGraphics import kCGEventLeftMouseDragged import time def mouseEvent(type, posx, posy): theEvent = CGEventCreateMouseEvent(None, type, (posx,posy), kCGMouseButtonLeft) CGEventPost(kCGHIDEventTap, theEvent) def mousemove(posx,posy): mouseEvent(kCGEventMouseMoved, posx,posy); def mousedrag(posx,posy): mouseEvent(kCGEventLeftMouseDragged, posx,posy); def mousedown(posxdown,posydown): mouseEvent(kCGEventLeftMouseDown, posxdown,posydown); def mouseup(posxup,posyup): mouseEvent(kCGEventLeftMouseUp, posxup,posyup); ourEvent = CGEventCreate(None); mousedown(" & xDown & "," & yDown & "); time.sleep(" & (delayTime as text) & "); mousedrag(" & xUp & "," & yUp & "); time.sleep(" & (delayTime as text) & "); mouseup(" & xUp & "," & yUp & "); END" end mouseDrag