Global Mouse Tracking - hewigovens/hewigovens.github.com GitHub Wiki

###OS 10.6+

NSEvent

NSEventMask mask = NSRightMouseUpMask | NSCursorUpdateMask;
    [NSEvent addGlobalMonitorForEventsMatchingMask:mask handler:^(NSEvent *event) {
        NSLog(@"%@", event);

        //get CGEventRef, origin point is Left-Bottom, so NSPoint is not equal to CGPoint
        CGEventRef cgEventRef = [event CGEvent];
        CGPoint cgPoint = CGEventGetLocation(cgEventRef);
    }];

###OS prior to 10.6, CGEventTap in CoreGraphics.framework

    CGEventMask eventMask = CGEventMaskBit(kCGEventMouseMoved);
	mouseEventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, eventMask, mouseEventCallback, NULL);
	CFRunLoopSourceRef runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, mouseEventTap, 0);
	CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
	CFRelease(mouseEventTap);
	CFRelease(runLoopSource);

mouseEventCallback

static CGEventRef mouseEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) 
{
    CGPoint point = CGEventGetLocation(event);
    NSLog(@"click at x:%f, y:%f", point.x, point.y);
}