Я пишу приложение, которое должно реагировать на общесистемные нажатия клавиш в Mac OS X.
Итак, я нашел несколько примеров кейлоггеров, которые должны работать, и врезались в стену, потому что все примеры основаны на NSSharedApplication() и PyObjC AppHelper.runEventLoop(), а мое приложение написано на wxPython.
Здесь я публикую модификацию самого простого примера из https://github.com/ljos, который, как я думал, должен работать. . Но это не так.
from AppKit import *
import wx
class AppDelegate(NSObject):
def applicationDidFinishLaunching_(self, aNotification):
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, handler)
def handler(event):
print (u"%@", event)
app = wx.App()
delegate = AppDelegate.alloc().init()
NSApp().setDelegate_(delegate)
app.MainLoop()
Очевидно, что MainLoop() не перехватывает делегированные NSEvents.
После app = wx.App() NSApp() возвращается правильно. Так почему это не работает? Как заставить это работать?