2016-07-21 23 views
5

Tôi mới sử dụng Swift và Xcode và tôi gặp sự cố tiếp theo:Bật trên OS X. Cách xử lý các sự kiện chuột toàn cầu?

Tôi có Ứng dụng Swift đơn giản với một bộ đếm (Label). enter image description here

Làm cách nào để xử lý tất cả nhấp chuột trên máy Mac (trong tất cả các ứng dụng) và hiển thị trong số Label?

Tôi sử dụng Xcode 7.3.1.

CẬP NHẬT 1. Điều tôi đã thấy là chức năng Monitoring EventsaddGlobalMonitorForEventsMatchingMask:handler: trong Cocoa, nhưng tôi không chắc chắn rằng tôi đang đi đúng hướng.

Trả lời

5

Bạn là chính xác về việc sử dụng addGlobalMonitorForEventsMatchingMask:handler:

Một ví dụ đơn giản có thể trông như thế này:

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 
     } 
    } 
} 

Sự kiện được phân phối không đồng bộ đến ứng dụng của bạn và bạn chỉ có thể quan sát sự kiện; bạn không thể sửa đổi hoặc ngăn cản sự kiện được gửi đến ứng dụng đích ban đầu của nó. Các sự kiện liên quan đến khóa chỉ có thể được giám sát nếu khả năng truy cập được bật hoặc nếu ứng dụng của bạn được tin cậy để truy cập trợ năng (xem AXIsProcessTrusted).

Lưu ý rằng người xử lý của bạn sẽ không được gọi cho các sự kiện được gửi đến đơn đăng ký của riêng bạn.

Để nắm bắt sự kiện trong phạm vi ứng dụng của bạn của bạn có thể sử dụng addLocalMonitorForEventsMatchingMask:handler: hoặc đối tượng NSClickGestureRecognizer.

Nếu bạn muốn kết hợp trình giám sát sự kiện toàn cầu với đối tượng nhận dạng cử chỉ, nó chỉ đơn giản là vấn đề triển khai cả hai đối tượng vào lớp của bạn.

Các vấn đề liên quan