Found:
self.machPortRef = CGEventTapCreate(kCGSessionEventTap, kCGTailAppendEventTap, kCGEventTapOptionDefault, CGEventMaskBit(kCGEventKeyDown), (CGEventTapCallBack)eventTapFunction, self); if (self.machPortRef == NULL) { printf("CGEventTapCreate failed!\n"); } else { self.eventSrc = CFMachPortCreateRunLoopSource(NULL, self.machPortRef, 0); if ( self.eventSrc == NULL ) { printf( "No event run loop src?\n" ); }else { CFRunLoopRef runLoop = CFRunLoopGetCurrent();
Properties:
CFMachPortRef machPortRef; CFRunLoopSourceRef eventSrc;
Event handler:
CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
source share