gpt4 book ai didi

OS X 上的 Swift。如何处理全局鼠标事件?

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:46 26 4
gpt4 key购买 nike

我是 Swift 和 Xcode 的新手,我有下一个问题:

我有一个带有一个计数器(Label)的简单 Cocoa Swift 应用程序。 enter image description here

如何处理我的 Mac 中的所有鼠标点击(在所有应用程序中)并将其显示在我的 Label 中?

我使用 Xcode 7.3.1。

更新 1. 我已经找到的是 Monitoring Events和 Cocoa 中的 addGlobalMonitorForEventsMatchingMask:handler: 函数,但我不确定我的方法是否正确。

最佳答案

您对使用 addGlobalMonitorForEventsMatchingMask:handler: 是正确的

一个简单的例子可能看起来像这样:

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

事件以异步方式传送到您的应用,您只能观察事件;您不能修改或以其他方式阻止将事件传递到其原始目标应用程序。仅当启用辅助功能或您的应用程序在辅助功能访问方面是可信的(请参阅 AXIsProcessTrusted)时,才可能监视与 key 相关的事件。

Note that your handler will not be called for events that are sent to your own application.

为了在您的应用中捕获事件,您可以使用 addLocalMonitorForEventsMatchingMask:handler: NSClickGestureRecognizer 对象。

如果您想将全局事件监视器与手势识别器对象结合起来,只需将这两个对象都实现到您的类中即可。

关于OS X 上的 Swift。如何处理全局鼠标事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38512281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com