2016-10-11 2 views
0

ich eine Anwendung schreibe, die systemweite Tastenfolgen auf Mac OS X reagierenWie verwende ich Mac OS X NSEvents in der wxPython-Anwendung?

So fand ich einige Key-Logger-Beispiele, die funktionieren sollte und eine Wand schlagen, weil alle Beispiele auf NSSharedApplication basieren() und PyObjC AppHelper.runEventLoop() während meine Anwendung in WxPython geschrieben wird.

Hier poste ich eine Modifikation des einfachsten Beispiels von https://github.com/ljos , dass ich dachte, es sollte funktionieren. Aber das tut es nicht.

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() 

Es ist offensichtlich, dass die MainLoop() nicht die delegierten NSEvents zu fangen.

Nach app = wx.App() wird die NSApp() korrekt zurückgegeben. Warum funktioniert das nicht? Wie kann ich es funktionieren lassen?

Antwort

0

Da niemand antwortete, ging ich mit verschiedenen Blickwinkel umher.

So entdeckte ich, dass Quarz-Modul verwendet werden kann, um Tastatur und Maus Ereignisse zu bekommen. Da keine benutzerdefinierte Schleife benötigt wird, stehen wx.App() und wx.App.MainLoop() nicht im Weg.

Ich fand auch ein nettes Paket namens pynput, das genau das für mich tut, so spart mir viel Zeit. Quartz ist ziemlich kompliziert, viele verschlüsselte Namen für Funktionen und Konstanten. Aber es macht einen guten Job.