Me gusta mucho la respuesta de @mat-burns.
Pero ya que estaríamos ejecutando el Applescript desde la línea de comandos para ejecutar el código swift de todos modos quería hacerlo todo desde un solo archivo.
Añadir el Applescript al código swift:
#!/usr/bin/env xcrun swift
import Foundation
let kDelayUSec : useconds_t = 500_000
func DragMouse(p0: CGPoint, p1: CGPoint) {
let mouseDown = CGEventCreateMouseEvent(nil, CGEventType(kCGEventLeftMouseDown), p0, CGMouseButton(kCGMouseButtonLeft)).takeUnretainedValue()
let mouseDrag = CGEventCreateMouseEvent(nil, CGEventType(kCGEventLeftMouseDragged), p1, CGMouseButton(kCGMouseButtonLeft)).takeUnretainedValue()
let mouseUp = CGEventCreateMouseEvent(nil, CGEventType(kCGEventLeftMouseUp), p1, CGMouseButton(kCGMouseButtonLeft)).takeUnretainedValue()
CGEventPost(CGEventTapLocation(kCGHIDEventTap), mouseDown)
usleep(kDelayUSec)
CGEventPost(CGEventTapLocation(kCGHIDEventTap), mouseDrag)
usleep(kDelayUSec)
CGEventPost(CGEventTapLocation(kCGHIDEventTap), mouseUp)
}
func ascript(){
var scriptToPerform: NSAppleScript?
let asCommand = "tell application \"QuickTime Player\" \n activate \n new screen recording \n delay 1 \n tell application \"System Events\" to key code 49 \n delay 1\n end tell"
scriptToPerform = NSAppleScript(source:asCommand)
var errorInfo = AutoreleasingUnsafeMutablePointer<NSDictionary?>()
if let script = scriptToPerform {
script.executeAndReturnError(errorInfo)
}
}
func main() {
let p0 = CGPointMake( CGFloat(atoi( C_ARGV[1])), CGFloat(atoi( C_ARGV[2])))
let p1 = CGPointMake( CGFloat(atoi( C_ARGV[3])), CGFloat(atoi( C_ARGV[4])))
DragMouse(p0, p1)
}
ascript()
main()
Una vez guardado el código y ejecutado /bin/chmod +x ~/scripts/clickdrag.swift
para que el script sea ejecutable
Cambia ~/scripts/clickdrag.swift
a la ruta real del archivo swift.
Ahora podemos ejecutar el código desde la línea de comandos :
ACTUALIZACIÓN
Antes habría tenido que introducir la línea de comandos de la siguiente manera:
~/scripts/clickdrag.swift -x 364 -y 206 -dx 1038 -dy 726
Pero si utilizamos la forma sencilla de calcular los límites que necesites abriendo una ventana del buscador y dándole forma a la zona que quieras capturar.
A continuación, ejecute este Applescript:
tell application "Finder" to get bounds of window 1
Esto devolverá los límites en el panel de resultados.
-> {364, 206, 1038, 726}
Sería mucho más fácil copiar y pegar 364, 206, 1038, 726
en el comando tal cual.
La actualización anterior le permite ejecutar el comando de la siguiente manera.
~/scripts/clickdrag.swift 364, 206, 1038, 726
1 votos
Esto puede resultarle útil: apple.stackexchange.com/questions/63056/
0 votos
Gracias me puso en la dirección correcta ... Voy a publicar mi solución ahora ...