主窗口更改时会通知NSAccessibilityNotificationName.mainWindowChanged观察者

时间:2017-11-09 10:16:53

标签: swift macos nsnotificationcenter accessibility-api

我希望在最前面的应用程序的主窗口发生更改时收到通知,即更改浏览器中的选项卡,更改SublimeText等中的文档并获取当前主窗口的标题。我对Swift很新,所以我很感激任何信息/帮助。

我已经在didActivateAppNotification对象上使用addobserver编写了一段代码来观察frontmostapp。每次更改为新应用程序时,它都会成功打印出最前面的应用程序。

所以我也想对最前面的应用程序的主窗口做同样的事情。但是,我所能做的就是通过CGWindowListOption获取最前面的应用程序的窗口列表,如here所述,然后滚动它以获取最前面应用程序的窗口列表并过滤它以获得主窗口。但我不想要一个轮询解决方案,即每秒获取此列表。相反,我想使用通知观察器,以便我可以实际询问主窗口何时发生变化。 - 我还尝试了一些Applescript解决方案,他们都需要轮询解决方案。

我无法找到任何教程,NSAccessibilityNotificationName类的示例,因为它们需要在Apple Dev Forums中进行特殊处理。我怎么能观察外部应用程序的这些通知? (特别是mainWindowChanged在我的例子中)

欢呼,快乐的编码!

class activeApp: NSObject {
    override init() {
        super.init()
        NSWorkspace.shared.notificationCenter.addObserver(self,
            selector: #selector(printMe(notification:)),
            name: NSWorkspace.didActivateApplicationNotification,
            object:nil)

    }
    @objc func printMe(notification: NSNotification) {
        let app = notification.userInfo!["NSWorkspaceApplicationKey"] as! NSRunningApplication
        print(app.localizedName!)
    }
}
let runme = activeApp()
RunLoop.main.run()

0 个答案:

没有答案