我目前正在修改由我的组织内的人员编写的应用程序,该应用程序无法再维护它。我正在尝试实现一个系统范围的全局热键,只需按下即可使应用程序窗口成为焦点。
我在网上遇到的唯一一个实现是通过PyObjC的HotKeyPython示例。这个例子虽然使用了Carbon,但在我测试时它似乎根本没有用。
以下是我尝试的内容似乎不起作用:
from Foundation import *
from AppKit import *
from Carbon.CarbonEvt import RegisterEventHotKey
from Carbon.Events import cmdKey, controlKey, optionKey, shiftKey
import objc, AppLauncher
import platform
import struct
IS_SNOW_LEOPARD = platform.mac_ver()[0].startswith('10.6')
if IS_SNOW_LEOPARD:
from Quartz import *
kEventHotKeyPressedSubtype = 6
kEventHotKeyReleasedSubtype = 9
class AppLauncher(NSObject):
window = objc.IBOutlet()
view = objc.IBOutlet()
field = objc.IBOutlet()
def awakeFromNib(self):
self.window.makeFirstResponder_(self.field)
self.field.selectText_(self)
self.field.setDelegate_(self)
self.controlTextDidChange_(None)
def applicationDidFinishLaunching(self):
# register cmd-control-J
self.hotKeyRef = RegisterEventHotKey(38, cmdKey + controlKey, (0, 0),
sendEvent_(), 0)
def sendEvent_(self, theEvent):
if theEvent.type() == NSSystemDefined and \
theEvent.subtype() == kEventHotKeyPressedSubtype:
self.activateIgnoringOtherApps_(True)
NSRunAlertPanel(u'Hot Key Pressed', u'Hot Key Pressed',
None, None, None)
super(AppLauncher, self).sendEvent_(theEvent)
关于如何让这个工作的任何想法(最好不要让碳参与)?
非常感谢。