kev*_*ner 4 events macos-carbon core-graphics quartz-graphics cgeventtap
我在通过事件点击发布事件时遇到了棘手的问题。我在 kCGHIDEventTap 上点击 NSSystemDefined,然后用新的事件替换该事件。我遇到的问题是,根据我发布事件的方式,它只能被某些应用程序看到。我的测试应用程序是 Opera、Firefox、Quicksilver 和 Xcode。以下是我在事件点击回调中尝试过的不同技术,以及结果。我期待每个应用程序的操作(“正确响应”);“系统提示音”表示没有绑定到那个键的系统声音。
创建一个新事件,并从回调中返回它。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音
创建一个新事件,使用 CGEventPost 发布到 kCGSessionEventTap,返回 null。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音
创建一个新事件,使用 CGEventPost 发布到 kCGAnnotatedSessionEventTap,返回 null。Opera:正确响应,Firefox:正确响应,Quicksilver:无响应/系统提示音,Xcode:无响应/系统提示音
创建一个新事件,使用 CGEventTapPostEvent 发布,返回 null。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音
创建一个新事件,使用 CGEventPost 发布到 kCGSessionEventTap,并返回新事件。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音
创建一个新事件,使用 CGEventPost 发布到 kCGAnnotatedSessionEventTap,并返回新事件。Opera:正确响应和系统哔声,Firefox:正确响应和系统哔声,Quicksilver:正确响应和系统哔声,Xcode:无响应/双系统哔声
创建一个新事件,使用 CGEventTapPostEvent 发布,并返回新事件。Opera:无响应/系统提示音,Firefox:无响应/系统提示音,Quicksilver:正确响应,Xcode:无响应/系统提示音
(6) 是最好的,但用户抱怨正确响应时系统会发出额外的哔哔声,我猜这来自事件的双重发布。我不确定其他组合可以尝试,或者其他地方可以看。任何人都可以提供任何指导吗?有什么方法可以同时从我的回调中返回事件并发布到带注释的水龙头而不同时执行这两项操作?
抱歉问了这么长的问题;我一直在做很多实验。
提前致谢
更新:这是我用来创建事件点击的代码:
CFMachPortRef eventTap;
eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, 0,CGEventMaskBit(NX_SYSDEFINED) | (1 << kCGEventKeyDown) | (1 << kCGEventKeyUp), myCGEventCallback, (void *)hidEventQueue);
Run Code Online (Sandbox Code Playgroud)
我想我解决了这个问题。我一直在使用+[NSEvent keyEventWithType:location:modifierFlags:timestamp:windowNumber:context:characters:charactersIgnoringModifiers:isARepeat:keyCode:]创建一个 NSEvent,然后返回该事件的-CGEvent. 我切换到CGEventCreateKeyboardEvent,使用从原始事件创建的事件源和CGEventCreateSourceFromEvent,并从回调返回事件。我所有的测试现在都通过了。
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |