OSX Quartz Event Taps: типы событий и способы их редактирования

Вот мой код:

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

Во-первых... что если я захочу отредактировать событие? Например, я слушаю событие keyDown и, если это "а", я превращаю его в "b", или редактирую положение мыши в режиме реального времени, или, например, просто фиксирую событие и не имею никакого эффекта (отключение определенного ключ например..)

Во-вторых.. CGEventType определяется с перечислением, которое перечисляет только несколько типов.. например, когда я нажимаю CMD, я получаю 12, но это не соответствует значению, указанному в перечислении... что мне не хватает??

1 ответ

Чтобы изменить событие, существуют различные функции CGEventSet.... Чтобы убить событие, я думаю, что ваша функция касания может просто вернуть NULL.

Перечисление для типов событий включает kCGEventFlagsChanged = NX_FLAGSCHANGED, Если вы ищите IOKit/hidsystem/IOLLEvent.h, он определяет NX_FLAGSCHANGED равным 12.

Другие вопросы по тегам