我在开发中有一个基本的按键转换器应用程序。转换适用于以下情况:

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)

最佳答案

因为按键是由向下键和向上键组成

09-16 05:56