Voici mon code:OSX Quartz Taps événement: types d'événements et comment modifier les événements
#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;
}
d'abord .. si je voulais modifier l'événement? Par exemple j'écoute l'événement keyDown et si c'est un "a" je le tourne dans un "b", ou édite la position de la souris en temps réel, ou par exemple capture simplement un évènement et le rend sans effet (désactivant un clé par exemple ..)
Deuxième ... CGEventType est défini avec une énumération qui ne liste que quelques types. Par exemple, lorsque je clique sur CMD, j'obtiens un 12, mais cela ne correspond pas à la valeur spécifiée dans l'énumération .. qu'est-ce que je manque?
bien répondu par Dave DeLong ici: http://stackoverflow.com/questions/5785630/modify-nsevent-to -send-a-différent-clé-que-celui-qui-était-pressé/5785895 # 5785895 – cksubs