这是我的代码:
#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,但与枚举中指定的值不匹配。
最佳答案
要修改事件,有各种CGEventSet ...函数。为了终止该事件,我认为您的tap函数只能返回NULL。
事件类型的枚举包括kCGEventFlagsChanged = NX_FLAGSCHANGED
。如果您查找IOKit/hidsystem/IOLLEvent.h,它将NX_FLAGSCHANGED定义为12。