Sie sind richtig über addGlobalMonitorForEventsMatchingMask:handler:
Ein einfaches Beispiel mit könnte wie folgt aussehen:
AppDelegate.swift
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet var textLabel : NSTextField!
var eventHandler : GlobalEventMonitor?
var gecount : Int = 0
func applicationDidFinishLaunching(aNotification: NSNotification) {
eventHandler = GlobalEventMonitor(mask: .LeftMouseDownMask, handler: { (mouseEvent: NSEvent?) in
self.gecount += 1
self.textLabel.stringValue = "global event monitor: \(self.gecount)"
})
eventHandler?.start()
}
}
GlobalEventMonitor.swift
public class GlobalEventMonitor {
private var monitor: AnyObject?
private let mask: NSEventMask
private let handler: NSEvent? ->()
public init(mask: NSEventMask, handler: NSEvent? ->()) {
self.mask = mask
self.handler = handler
}
deinit {
stop()
}
public func start() {
monitor = NSEvent.addGlobalMonitorForEventsMatchingMask(mask, handler: handler)
}
public func stop() {
if monitor != nil {
NSEvent.removeMonitor(monitor!)
monitor = nil
}
}
}
Ereignisse werden asynchron an Ihre App gesendet, und Sie können das Ereignis nur beobachten. Sie können das Ereignis nicht an seine ursprüngliche Zielanwendung ändern oder anderweitig verhindern. Schlüsselbezogene Ereignisse können nur überwacht werden, wenn die Barrierefreiheit aktiviert ist oder wenn Ihre Anwendung für den Zugriff auf Eingabehilfen vertraut ist (siehe AXIsProcessTrusted).
Beachten Sie, dass Ihr Handler nicht für Ereignisse genannt werden, die Ihre eigene Anwendung gesendet werden.
Um Ereignisse in Ihrer App zu erfassen Ihr entweder die addLocalMonitorForEventsMatchingMask:handler:
oder die NSClickGestureRecognizer
Objekt verwenden können.
Wenn Sie den globalen Ereignismonitor mit dem Gestenerkennerobjekt kombinieren möchten, müssen Sie lediglich beide Objekte in Ihre Klasse implementieren.