Me gusta @ mat-burns responder mucho.
Pero como estaríamos ejecutando Applescript desde la línea de comandos para ejecutar el código Swift de todos modos, quería hacerlo todo desde un solo archivo.
Agregando 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 que se guarda el código y hemos ejecutado /bin/chmod +x ~/scripts/clickdrag.swift
para hacer el script ejecutable
Cambie ~/scripts/clickdrag.swift
a su ruta real al archivo swift.
Ahora podemos ejecutar el código desde la línea de comando:
ACTUALIZACIÓN
Antes de que hubieras tenido que ingresar la línea de comando así:
~/scripts/clickdrag.swift -x 364 -y 206 -dx 1038 -dy 726
Pero si utilizamos la forma simple de resolver los límites que necesita, abrimos una ventana del buscador y la configuramos para el área que desea capturar.
Luego ejecuta 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 pasar 364, 206, 1038, 726
en el comando tal como está.
La actualización anterior le permite ejecutar el comando como tal.
~/scripts/clickdrag.swift 364, 206, 1038, 726