Sì, è possibile. È possibile utilizzare Quartz Event Services per simulare eventi di input.
Supponendo C, ho scritto questo rapido esempio:
#include <ApplicationServices/ApplicationServices.h>
#include <unistd.h>
int main() {
// Move to 200x200
CGEventRef move1 = CGEventCreateMouseEvent(
NULL, kCGEventMouseMoved,
CGPointMake(200, 200),
kCGMouseButtonLeft // ignored
);
// Move to 250x250
CGEventRef move2 = CGEventCreateMouseEvent(
NULL, kCGEventMouseMoved,
CGPointMake(250, 250),
kCGMouseButtonLeft // ignored
);
// Left button down at 250x250
CGEventRef click1_down = CGEventCreateMouseEvent(
NULL, kCGEventLeftMouseDown,
CGPointMake(250, 250),
kCGMouseButtonLeft
);
// Left button up at 250x250
CGEventRef click1_up = CGEventCreateMouseEvent(
NULL, kCGEventLeftMouseUp,
CGPointMake(250, 250),
kCGMouseButtonLeft
);
// Now, execute these events with an interval to make them noticeable
CGEventPost(kCGHIDEventTap, move1);
sleep(1);
CGEventPost(kCGHIDEventTap, move2);
sleep(1);
CGEventPost(kCGHIDEventTap, click1_down);
CGEventPost(kCGHIDEventTap, click1_up);
// Release the events
CFRelease(click1_up);
CFRelease(click1_down);
CFRelease(move2);
CFRelease(move1);
return 0;
}
e assumendo GCC, compilare con:
gcc -o program program.c -Wall -framework ApplicationServices
godersi la magia.
A seconda del caso d'uso, c'è un Strumento chiamato "UI Recorder" che registra tutto ciò che fai all'interfaccia utente del tuo programma e lo riproduce quando vuoi. – zneak
Grazie, ma quello che voglio veramente è inviare qualsiasi input del mouse arbitrario al sistema operativo. –
L'ho fatto prima eseguendo un server di vnc e scrivendo un piccolo client di vnc per inviare gli eventi del mouse al server. Ci sono server di vnc open source che lo fanno, quindi una buona ultima risorsa sarebbe quella di leggere la fonte di uno. –