OSX Quartz Event Taps: tipos de eventos y cómo editar eventos

Aquí está mi código:

#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;
}

Primero .. ¿y si quisiera editar el evento? Por ejemplo, escucho el evento KeyDown y si es una "a" lo convierto en una "b", o edito la posición del mouse en tiempo real, o por ejemplo simplemente captura un evento y lo hago sin efecto (deshabilitando un clave por ejemplo ..)

Segundo ... CGEventType se define con una enumeración que enumera solo algunos tipos ... por ejemplo, cuando presiono CMD obtengo un 12, pero no coincide con el valor especificado en la enumeración ... ¿qué me falta?

Respuestas a la pregunta(1)

Su respuesta a la pregunta