我正在引用这个旧线程: Mac OS X 的系统范围快捷方式
我一直在尝试使用它为 osx 创建一个全局热键,因为我使用 pyglobalshortcuts 的旧方法不再适用于 PyQt5。问题在于,当我在“CGEventTapCreate”函数中监听“kCGEventKeyUp”或“kCGEventKeyDown”时,程序以代码“-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'作为我的捷径)。
我是否能够在 Quartz 中检测到这个快捷方式非常遥远,或者在 OSX 中有更好的方法吗?
谢谢,-马克