OSX Quartz事件点击:事件类型以及如何编辑事件

时间:2009-11-21 19:55:27

标签: macos events quartz-graphics window-managers

这是我的代码:

#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,但这与枚举中指定的值不匹配..我是什么我缺少??

1 个答案:

答案 0 :(得分:3)

要修改事件,有各种CGEventSet ...函数。要杀死事件,我认为你的tap函数只能返回NULL。

事件类型的枚举包括kCGEventFlagsChanged = NX_FLAGSCHANGED。如果你查找IOKit / hidsystem / IOLLEvent.h,它会将NX_FLAGSCHANGED定义为12。