2009-11-21 4 views
5

Aquí está mi código:OSX cuarzo Evento: Taps tipos de eventos y cómo editar eventos

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

En primer lugar .. lo que si quería 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 simplemente capturo un evento y lo hago sin efecto (desactivando un particular clave por ejemplo ...)

Segundo .. CGEventType se define con una enumeración que enumera solo algunos tipos ... por ejemplo, cuando pulso CMD obtengo un 12, pero eso no coincide con el valor especificado en la enumeración .. lo que me estoy perdiendo?

+0

respondido bien por Dave DeLong aquí: http://stackoverflow.com/questions/5785630/modify-nsevent-to -send-a-different-key-than-the-one-that-was-pressed/5785895 # 5785895 – cksubs

Respuesta

2

Para modificar un evento, hay varias ... CGEventSet funciones. Para matar el evento, creo que su función de tap puede simplemente devolver NULL.

La enumeración de los tipos de eventos incluye kCGEventFlagsChanged = NX_FLAGSCHANGED. Si miras hacia arriba IOKit/hidsystem/IOLLEvent.h, define NX_FLAGSCHANGED ser 12.

Cuestiones relacionadas