Программирование глобального определения горячих клавиш для 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, она могла обнаружить ключевые события.
Спасибо! -Отметка