CGEventTapCreate возвращает ноль в MacOS Mojave - PullRequest
0 голосов
/ 10 октября 2018

Я полностью застрял в логике, которая работает уже много лет.Я использую это для прослушивания событий клавиатуры (горячие клавиши), пока приложение находится в фоновом режиме.

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 голосов
/ 10 октября 2018

Получил эту работу после некоторого боя.Добавьте это в ваш info.plist:

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

Затем перейдите в системные настройки -> безопасность -> конфиденциальность -> доступность и убедитесь, что ваше приложение там и проверено.

Если он уже есть и это продолжает происходить, удалите его и добавьте снова.Я должен делать это каждый раз, когда перестраиваю свое приложение ...

...