【发布时间】:2013-02-08 17:55:29
【问题描述】:
我正在开发一个基本的按键转换器应用程序。转换适用于以下内容:
CFRunLoopSourceRef runLoopSource = NULL;
CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, kCGEventMaskForAllEvents, myCGEventCallback, NULL);
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
如您所料,kCGEventMaskForAllEvents 会不断触发除键盘之外的任何鼠标移动或点击,我怀疑这会占用系统资源。我尝试替换CGEventMaskBit(kCGEventKeyDown),我可以从Quartz Event doc on Event Types 看出这是我想要的,并且会清除鼠标移动和点击。不幸的是,使用它似乎只是吃掉击键,而不是转换它们。
我做错了什么?
以下工作,但我仍然不明白为什么 CGEventMaskBit(kCGEventKeyUp) 本身不是正确的实现。
CGEventMaskBit(kCGEventKeyUp) | CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(NX_SYSDEFINED)
【问题讨论】:
-
我已经对此进行了一些研究,但我不确定这是否是答案。我在看你的东西时也注意到了。 NX_SYSDEFINED 似乎对我不起作用
标签: macos cocoa keyboard keyboard-events cgeventtap