macos - 为什么“Key Down 事件掩码”不起作用,但“全部掩码”却起作用?

标签 macos cocoa keyboard keyboard-events cgeventtap

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

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)

最佳答案

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

关于macos - 为什么“Key Down 事件掩码”不起作用,但“全部掩码”却起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778522/

相关文章:

Cocoa:学习当前选择的键盘布局/输入语言

objective-c - 如何限制 NSMetadataQuery 搜索结果

android - 是否可以将 Android 编程为物理 USB 键盘?

Swift mac 应用程序 -> 移动光标关闭 NSWindow

ruby - cert.pem 的 RVM 证书目录

ios - 在 objective-c 中的线程之间传递消息

intellij-idea - Intellij 以插入键开始

python - 如何让 Automator 使用 pyperclip 识别 python 脚本?

OSX 的 iOS Segue 替代品

iOS:从 iPad 应用程序的物理键盘接收 cmd-B 等键