基本的なキーストローク コンバーター アプリを開発中です。変換は次のように機能します。
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
、キーボードに加えてマウスの動きやクリックに対して常に起動しており、システム リソースを占有していると思われます。を代用してみました。これは、イベント タイプに関する Quartz Event docCGEventMaskBit(kCGEventKeyDown)
から最もよくわかるものであり、マウスの動きとクリックを除外します。残念ながら、これを使用すると、キーストロークを変換するのではなく、単に食べてしまうようです。
私は何を間違っていますか?
CGEventMaskBit(kCGEventKeyUp)
以下は機能しますが、それ自体が正しい実装ではない理由はまだわかりません。
CGEventMaskBit(kCGEventKeyUp) | CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(NX_SYSDEFINED)