Программирование глобального определения горячих клавиш для OSX в Python с использованием pyobjc - Ошибка при использовании 'Quartz.CGEventMaskBit'

Я ссылаюсь на этот старый поток: общесистемный ярлык для Mac OS X

Я пытался использовать это для создания глобальной горячей клавиши для OSX, так как мой старый метод использования pyglobalshortcuts больше не работает с PyQt5. Проблема в том, что когда я слушаю "kCGEventKeyUp" или "kCGEventKeyDown" в функции "CGEventTapCreate", программа завершается с кодом "-11". Вот код, который я пытался:

import Quartz
from AppKit import NSKeyUp, NSSystemDefined, NSEvent

def keyboardTapCallback(proxy, type_, event, refcon):
    keyEvent = NSEvent.eventWithCGEvent_(event)
    if keyEvent is None:
        pass
    else:
        print keyEvent


tap = Quartz.CGEventTapCreate(
                              Quartz.kCGSessionEventTap,
                              Quartz.kCGHeadInsertEventTap,
                              Quartz.kCGEventTapOptionListenOnly,
                              # Quartz.kCGEventMaskForAllEvents, 
                              Quartz.CGEventMaskBit(Quartz.kCGEventKeyUp),
                              keyboardTapCallback,
                              None
                             )


runLoopSource = Quartz.CFMachPortCreateRunLoopSource(None, tap, 0)
Quartz.CFRunLoopAddSource(
                          Quartz.CFRunLoopGetCurrent(),
                          runLoopSource,
                          Quartz.kCFRunLoopDefaultMode
                         )

Quartz.CGEventTapEnable(tap, True)

try:
    Quartz.CFRunLoopRun()
except Exception as e:
    print e, "<<<<<<<<<<<<<<<"

Я также попытался заменить 'Quartz.kCGEventMaskBit(Quartz.kCGEventKeyUp)' на 'Quartz.kCGEventMaskForAllEvents', и хотя это не удалось, он также не возвращает буквенно-цифровые ключи (мне нужно иметь возможность использовать 'ctrl+shift+d' как мой ярлык).

Я ужасно далек от того, чтобы быть в состоянии обнаружить этот ярлык в Кварце, или есть лучший метод в OSX?

Спасибо, Марк

1 ответ

Решение

Я думаю, что я только что понял это. Я использую общую клавиатуру через Synergy. Когда я вернулся к своей клавиатуре Mac, она могла обнаружить ключевые события.

Спасибо! -Отметка

Другие вопросы по тегам