objective-c - CGEventTapCreate 在 macOS Mojave 中返回 null

标签 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 的最新更新之前一直有效。我该如何解决这个问题的原因?有谁知道我怎样才能让它再次工作?

最佳答案

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

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

然后转到您的系统首选项 -> 安全 -> 隐私 -> 可访问性,并确保您的应用程序在那里并已检查。

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

关于objective-c - CGEventTapCreate 在 macOS Mojave 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52738506/

相关文章:

ios - 如何使用 SKPSMTPMessage 发送电子邮件,它将在电子邮件客户端中正常解析?

objective-c - 各种 kIOPMAssertionType 的区别

macos - 当我在终端中调用它时,Emacs 错误 "Failed to initialize color list unarchiver"

objective-c - 终端无法识别更新的用户默认值

ios - 位置服务在 iOS10 中无法与 UIWebView 一起使用

macos - twisted.internet.error.CannotListenError : Couldn't listen on any:80: [Errno 13] Permission denied

java - mac osx 上 java7 模态对话框的焦点问题

c - uint32 和 uint64 的 OSX、C 等效项是什么?

python - 无法在 Mojave 中升级 Python

drag-and-drop - Mojave - 如果写入的项目多于拖动的行,则从 NSTableView 拖放会失败