5

我完全被多年来一直在工作的逻辑所困扰。我正在使用它在应用程序处于后台时收听键盘事件(热键)。

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

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

代码没有改变,这已经工作了很长时间,直到最新的 mojave 更新。我该如何解决这个问题的原因?有谁知道我怎样才能让它再次工作?

4

1 回答 1

6

经过一番战斗后得到了这个工作。将此添加到您的 info.plist:

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

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

如果它已经存在并且这种情况不断发生,请将其删除并再次添加。每次我重建我的应用程序时,我都必须这样做......

于 2018-10-10T13:47:17.710 回答