macOS Ventura 13.4.1下CGEventTapCreate返回NULL问题求助
macOS Ventura 13.4.1下CGEventTapCreate返回NULL的问题排查
在macOS上拦截按键一直是棘手的问题。我4年前编写的代码原本可用,系统更新后失效,此前已修复过,如今在macOS Ventura 13.4.1下再次出现CGEventTapCreate返回NULL的情况。
相关代码
NSLog(@"🔹 Creating event tap"); eventTap = CGEventTapCreate( kCGHIDEventTap, // Event tap is placed at point where HID system events enter window server. kCGHeadInsertEventTap, // Insert tap BEFORE any pre-existing event taps at the same location. kCGEventTapOptionDefault, // Active filter, not passive listener. CGEventMaskBit( NSEventTypeKeyDown ) | CGEventMaskBit( NSEventTypeKeyUp ) | CGEventMaskBit( NSEventTypeMouseMoved ) | CGEventMaskBit( NSEventTypeFlagsChanged ) | CGEventMaskBit( NSEventTypeSystemDefined ), (CGEventTapCallBack)tap_callback, (__bridge void *)(self)); if ( eventTap == NULL ) { NSLog( @"Unable to create event tap. Run as root or `SysPrefs->Security&Privacy->Privacy->{check mapper app}" ); NSLog( @"👋"); [NSApp terminate:nil]; // or: exit( 1 ); } NSLog(@"🔹 Enabling tap"); // :
补充信息
- 我制作了一个最小测试项目,目标实现a/z按键互换,但无法运行,已提交Issue。
- 已解决CLI版本的问题,但XCode中的项目仍无法创建EventTap。
- 苹果工程师提供了可运行的Swift代码,我尝试过刷新配置、重置钥匙串、调整权限等多种方法,均无效果,恳请帮忙排查。
- 资料显示仅root用户可在HID事件入口创建事件tap,且已有开发者在Ventura上实现EventTap功能。
内容的提问来源于stack exchange,提问作者P i
相关产品推荐
相关产品推荐

