Наблюдатель NSAccessibilityNotificationName.mainWindowChanged будет уведомлен об изменении главного окна.

Я хотел бы получать уведомления об изменении главного окна самого переднего приложения, т.е. изменении вкладки в браузере, изменении документа в SublimeText и т. д., и получить заголовок этого текущего главного окна. Я новичок в Swift, поэтому буду признателен за любую информацию/помощь.

Я написал фрагмент кода для наблюдения за самым передним приложением, используя addobserver для объекта didActivateAppNotification. Он успешно распечатывает самое переднее приложение каждый раз, когда оно меняется на новое.

Поэтому я также хочу сделать то же самое с главным окном самого переднего приложения. Однако все, что я могу сделать, это получить списки окон самого переднего приложения через CGWindowListOption, как объяснено здесь, затем прокрутите его, чтобы получить список окон самого переднего приложения, и отфильтруйте его, чтобы получить главное окно. Но мне не нужно решение для опроса, которое должно получать этот список каждую секунду. Вместо этого я хотел бы использовать наблюдатель уведомлений, чтобы я мог спросить, когда изменится главное окно. - Я также пробовал некоторые решения Applescript, все они должны быть решениями для опроса.

Я не смог найти никаких руководств, примеров классов NSAccessibilityNotificationName, так как говорится, что они требуют специальной обработки в Форумы разработчиков Apple. Как я мог наблюдать за этими уведомлениями для внешних приложений? (в частности, 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()

person m41w4r3.exe    schedule 09.11.2017    source источник