Mac开发云集MacOS开发 技术集锦iOS之MAC端开发

利用AXObserver监控三方app

2018-04-09  本文已影响32人  LyleWh

在开发过程可能会遇到要监控当前app的一些工作情况,如弹出窗口,移动窗口位置等。查询资料后,发现可以通过利用AXObserver监控app的一些变化。具体步骤如下:
1 声明观察者

var observer: AXObserver? = nil

2 利用BundleIdentifier获取要监控的app

let apps = NSRunningApplication.runningApplications(withBundleIdentifier: "com.iqiyi.player")
let app = apps.last
let pid: pid_t = (app?.processIdentifier)!

3 创建回调闭包,这里只是打印通知

let myCallBack: AXObserverCallback = {
    (observer: AXObserver, app: AXUIElement, noti: CFString, refcon: UnsafeMutableRawPointer?) -> Swift.Void in
     print(noti)
  }

4 创建观察者

AXObserverCreate(pid, myCallBack, &observer)

5 将AXObserver加入Runloop中

CFRunLoopAddSource(CFRunLoopGetCurrent(), AXObserverGetRunLoopSource(observer!), CFRunLoopMode.defaultMode)

6 添加需接收到通知

AXObserverAddNotification(observer!, AXUIElementCreateApplication(pid), kAXWindowMovedNotification as CFString, nil)
上一篇 下一篇

猜你喜欢

热点阅读