Кварцевые Касания События OSX: типы событий и как отредактировать события

Вот мой код:

#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 событию и если это - "a", я поворачиваю его в "b", или редактирую положение мыши в режиме реального времени, или например просто получаю событие и заставляю его не иметь никакого эффекта (запрещающий конкретный ключ, например..)

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

6
задан luca 21 November 2009 в 19:55
поделиться

1 ответ

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

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

3
ответ дан 17 December 2019 в 18:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: