CGEventTapCreate在macOS Mojave中返回null

时间:2018-10-10 10:48:09

标签: objective-c macos macos-mojave cgeventtap

我完全相信已经使用了很多年的逻辑。我正在使用它来监听应用程序在后台时的键盘事件(热键)。

CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap,
                            kCGHeadInsertEventTap,
                            kCGEventTapOptionDefault,
                            CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(kCGEventFlagsChanged),
                            myCGEventCallback,
                            nil);

if (!eventTap) {
    printf("error: event tap register failed\n");
    return false;
}

代码没有更改,并且在最新的mojave更新之前已经有效了很长时间。我该如何排除故障原因?有谁知道我该如何再次使其正常工作?

1 个答案:

答案 0 :(得分:1)

经过一番战斗后才开始运作。将此添加到您的info.plist:

  <key>NSAppleEventsUsageDescription</key>
  <string></string>

然后转到系统偏好设置->安全->隐私->可访问性,并确保您的应用已存在并已检查。

如果已经存在并且一直在发生,请将其删除并再次添加。每次重建应用程序时,我都必须这样做。