4

基本的なキーストローク コンバーター アプリを開発中です。変換は次のように機能します。

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)
4

2 に答える 2

2

キーストロークのキープレスはキーダウンとキーアップで構成されているため

于 2013-02-10T16:44:21.553 に答える