CGEventTapCreate возвращает ноль в MacOS Mojave
Я полностью застрял в логике, которая работает уже много лет. Я использую это для прослушивания событий клавиатуры (горячие клавиши), пока приложение находится в фоновом режиме.
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 ответ
Решение
Получил это работает после некоторой борьбы. Добавьте это в ваш info.plist:
<key>NSAppleEventsUsageDescription</key>
<string></string>
Затем перейдите к настройкам вашей системы -> безопасность -> конфиденциальность -> доступность и убедитесь, что ваше приложение там и проверено.
Если он уже есть и это продолжается, удалите его и добавьте снова. Я должен делать это каждый раз, когда перестраиваю свое приложение...