有没有办法独立于我的应用程序在 macOS 上跟踪鼠标移动?
Is there a way to track mouse movement on macOS independent of my app?
macOS/Swift 上是否有某种系统级别或可访问性 API 会在用户与鼠标交互时触发回调,而不管我的应用是否处于焦点状态?
例如托盘应用程序或后台服务应用程序之类的东西,可以收集鼠标事件。
您要查找的是名为 NSEvent class 的方法 class func addGlobalMonitorForEvents(matching mask: NSEvent.EventTypeMask, handler block: @escaping (NSEvent) -> Void) -> Any?
。请注意,它只会在您的应用未激活时调用:
NSEvent.addGlobalMonitorForEvents(matching: [.mouseMoved]) { event in
print("event:", event)
}
如果您需要在您的应用处于活动状态时监控鼠标事件,您需要使用 class func addLocalMonitorForEvents(matching mask: NSEvent.EventTypeMask, handler block: @escaping (NSEvent) -> NSEvent?) -> Any?
:
在本地监控它
NSEvent.addLocalMonitorForEvents(matching: [.mouseMoved, .leftMouseDown, .mouseExited]) { event in
switch event.type {
case .mouseMoved: print("mouseMoved")
case .leftMouseDown: print("leftMouseDown")
default: print("other event")
}
return event
}
macOS/Swift 上是否有某种系统级别或可访问性 API 会在用户与鼠标交互时触发回调,而不管我的应用是否处于焦点状态?
例如托盘应用程序或后台服务应用程序之类的东西,可以收集鼠标事件。
您要查找的是名为 NSEvent class 的方法 class func addGlobalMonitorForEvents(matching mask: NSEvent.EventTypeMask, handler block: @escaping (NSEvent) -> Void) -> Any?
。请注意,它只会在您的应用未激活时调用:
NSEvent.addGlobalMonitorForEvents(matching: [.mouseMoved]) { event in
print("event:", event)
}
如果您需要在您的应用处于活动状态时监控鼠标事件,您需要使用 class func addLocalMonitorForEvents(matching mask: NSEvent.EventTypeMask, handler block: @escaping (NSEvent) -> NSEvent?) -> Any?
:
NSEvent.addLocalMonitorForEvents(matching: [.mouseMoved, .leftMouseDown, .mouseExited]) { event in
switch event.type {
case .mouseMoved: print("mouseMoved")
case .leftMouseDown: print("leftMouseDown")
default: print("other event")
}
return event
}