2

我正在引用这个旧线程: 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 中有更好的方法吗?

谢谢,-马克

4

1 回答 1

1

我想我刚刚想通了。我通过 Synergy 使用共享键盘。当我回到我的 mac 键盘时,它可以检测到按键事件。

谢谢!-标记

于 2017-04-13T22:50:45.647 回答