OSX Quartz Event Taps: typy zdarzeń i sposób edycji zdarzeń

Oto mój kod:

#import <ApplicationServices/ApplicationServices.h>

CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type,  CGEventRef event, void *refcon) {
 printf("%u\n", (uint32_t)type);
 return event; 
}

int main (int argc, const char * argv[]) {
 CFMachPortRef eventTap;  
 CFRunLoopSourceRef runLoopSource; 

 eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, myCGEventCallback, NULL);
 runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
 CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
 CGEventTapEnable(eventTap, true);
 CFRunLoopRun();
    return 0;
}

Po pierwsze ... co jeśli chciałbym edytować wydarzenie? Na przykład słucham zdarzenia keyDown i jeśli jest to „a”, obracam go w „b” lub edytuję pozycję myszy w czasie rzeczywistym, lub na przykład po prostu przechwytuję zdarzenie i sprawia, że ​​nie ma ono żadnego efektu (wyłączenie konkretnego klucz na przykład ..)

Po drugie .. CGEventType jest zdefiniowany z enumem, który wymienia tylko kilka typów ... na przykład, gdy trafię CMD, otrzymam 12, ale nie pasuje do wartości określonej w wyliczeniu .. czego brakuje?

questionAnswers(1)

yourAnswerToTheQuestion