2

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

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

所以我也想对最前面的应用程序的主窗口做同样的事情。但是,我所能做的就是通过此处解释的 CGWindowListOption 获取最前面的应用程序的窗口列表然后滚动它以获取最前面的应用程序的窗口列表并对其进行过滤以获取主窗口。但我不想要一个轮询解决方案,即每秒获取此列表。相反,我想使用通知观察者,以便我可以实际询问主窗口何时更改。-我也尝试了一些 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()
4

0 回答 0