Можете ли вы использовать CGEventSetLocation для перемещения мыши? - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть небольшая программа, которая должна перемещать мышь в определенную точку (в данном случае 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);
}

1 Ответ

0 голосов
/ 21 ноября 2011

Смущает, нужная вам функция на самом деле не в Quartz Event Services, а в Quartz Display Services .

...