Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift NSAccessibilityNotificationName.mainWindowChanged观察者在主窗口更改时收到通知_Swift_Macos_Nsnotificationcenter_Accessibility Api - Fatal编程技术网

Swift NSAccessibilityNotificationName.mainWindowChanged观察者在主窗口更改时收到通知

Swift NSAccessibilityNotificationName.mainWindowChanged观察者在主窗口更改时收到通知,swift,macos,nsnotificationcenter,accessibility-api,Swift,Macos,Nsnotificationcenter,Accessibility Api,我希望在最前面的应用程序的主窗口发生更改时收到通知,即更改浏览器中的选项卡、在SublimiteText中更改文档等,并获取当前主窗口的标题。我是Swift的新手,因此我非常感谢您提供的任何信息/帮助 我已经编写了一段代码,通过在didActivateAppNotification对象上使用addobserver来观察frontmostapp。每次更改为新应用程序时,它都会成功打印出最前端的应用程序 所以我也想对最前面的应用程序的主窗口做同样的事情。但是,我所能做的就是通过CGWindowLis

我希望在最前面的应用程序的主窗口发生更改时收到通知,即更改浏览器中的选项卡、在SublimiteText中更改文档等,并获取当前主窗口的标题。我是Swift的新手,因此我非常感谢您提供的任何信息/帮助

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

所以我也想对最前面的应用程序的主窗口做同样的事情。但是,我所能做的就是通过CGWindowListOption获取最前端应用程序的窗口列表,如前所述,然后滚动该窗口以获取最前端应用程序的窗口列表,并对其进行过滤以获取主窗口。但是我不想要一个轮询解决方案,那就是每秒都获取这个列表。相反,我想使用一个通知观察者,这样我就可以真正询问主窗口何时更改-我还尝试了一些Applescript解决方案,它们都需要是轮询解决方案

我找不到任何教程,NSAccessibilityNotificationName类的示例,因为它说它们需要在中进行特殊处理。如何观察外部应用程序的通知?(在我的示例中特别更改)

干杯,快乐编码

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()