У меня есть небольшая программа, которая должна перемещать мышь в определенную точку (в данном случае 100 100), когда она проходит за 500 пикселей с левой стороны экрана. CGEventTap правильно получает события kCGEventMouseMoved, но CGEventSetLocation, кажется, перемещает только такие события, как mouseUp, но не MouseMoved.
Можно ли двигать мышь с помощью CGEventSetLocation? Если нет, есть ли другой способ сделать это?
Я включил свой код здесь:
CGEventRef
mouse_filter(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
if (type != kCGEventMouseMoved)
return event;
CGPoint point = CGEventGetLocation(event);
CGPoint target = CGPointMake(500,point.y);
if (point.x >= 500){
CGEventSetLocation(event,target);
printf("(%f,%f)\n", point.x, point.y);
}
return event;
}
int
main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
CFRunLoopSourceRef runLoopSource;
CGEventMask event_mask;
event_mask = (1 << kCGEventMouseMoved);
CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, event_mask, mouse_filter, NULL);
if (!eventTap) {
NSLog(@"Couldn't create event tap!");
exit(1);
}
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
CFRunLoopRun();
CFRelease(eventTap);
CFRelease(runLoopSource);
[pool release];
exit(0);
}