Как я могу реализовать глобальную горячую клавишу в Python .app на Mac OS X? - PullRequest
2 голосов
/ 29 марта 2011

В настоящее время я изменяю приложение, написанное кем-то в моей организации, которое больше не может его поддерживать.Я пытаюсь реализовать общесистемную глобальную горячую клавишу, которая будет просто фокусировать окно приложения при нажатии.

Единственная реализация этого, с которой я столкнулся онлайн, была через 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)

Есть какие-нибудь мысли о том, как я могу заставить это работать (желательно без вовлечения углерода)?

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...