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.