You are correct about using addGlobalMonitorForEventsMatchingMask:handler:
A simple example might look something like this:
AppDelegate.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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 } } } |