Objective c CGEventTapCreate在macOS Mojave中返回null
我完全被已经工作了很多年的逻辑所束缚。我用它来听键盘事件(热键),而应用程序是在后台Objective c CGEventTapCreate在macOS Mojave中返回null,objective-c,macos,macos-mojave,cgeventtap,Objective C,Macos,Macos Mojave,Cgeventtap,我完全被已经工作了很多年的逻辑所束缚。我用它来听键盘事件(热键),而应用程序是在后台 CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, CGEventMaskB
CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap,
kCGHeadInsertEventTap,
kCGEventTapOptionDefault,
CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(kCGEventFlagsChanged),
myCGEventCallback,
nil);
if (!eventTap) {
printf("error: event tap register failed\n");
return false;
}
代码没有改变,在mojave的最新更新之前,这已经运行了很长时间。我怎样才能找出原因呢?有人知道我怎样才能让它再次工作吗?经过一番战斗后,它开始工作了。将此添加到您的info.plist:
<key>NSAppleEventsUsageDescription</key>
<string></string>
nsappleeventsagedescription
然后转到您的系统首选项->安全->隐私->可访问性,并确保您的应用程序已存在并已选中
如果它已经存在,并且这种情况持续发生,请将其删除,然后再次添加。每次重建应用程序时,我都必须这样做…应该总是提到源代码。这是因为您是一个活动筛选器(
kcgeventtaptiondefault
),您可以通过将kcgeventtaptiondefault
替换为listenly
将其更改为listenly=1
模式