Я разрабатываю коммерческое приложение, которое делает именно то, что вы описываете, и я уже более года пытаюсь сделать это разными способами. Я начинающий разработчик, поэтому я полностью открыт для идеи, что может быть гораздо лучший способ сделать это, чем мой, но он кажется стабильным и работает.
Я использую Apple Script
Я получаю путь к активному документу каждые 3 секунды, но если активным приложением является Finder, я получаю путь к активному окну. Я делаю это с помощью Apple Script, как описано в принятом ответе.
Получение списка окон с использованием углерода
Чтобы получить список окон всех процессов для получения идентификатора окна (что Apple Script не может сделать), я использую CGWindowListCopyWindowInfo, как подробно описано в этом вопросе:
Получение уникального идентификатора для окна другого приложения
Это представляет мне массив со всеми окнами всех процессов, упорядоченных по очереди. Так что все, что мне нужно сделать, это извлечь первую запись из массива. Это также может быть использовано для получения скриншота переднего окна, если это полезно для вас, как показано в примере приложения Son of Grab, который был неоценим для меня в качестве рабочего примера.
Отправка Apple Script из какао
Что касается Apple Script, я экспериментировал со всеми 3, которые предлагает Джим, и я пришел к выводу, что у каждого есть свои проблемы, как с точки зрения стабильности, так и гибкости.
Apple Event Manager полагается на вас
отправка необработанных событий Apple. Для меня,
это было слишком похоже на тяжелую работу и
слишком низкий уровень.
Используя NSAppleScript, я обнаружил, что
медленный и подверженный ошибкам. Это также
довольно неуклюже, когда вы хотите отправить
все разнообразие Apple Script
сообщения, как я.
При чтении скриптового моста,
Я был очень взволнован, только чтобы попробовать это
и быть очень разочарован. Для
Атрибуты окон я был
пытаясь схватить, он даже не
признать их как существующие. Казалось
для меня быть глючным и странным. Я жду
если команды, которые вы отправляете
при поддержке SB, это было бы лучшим
опция.
Четвертый вариант
Теперь я полагаюсь на потрясающую оболочку Objective C для Apple Script, которая называется AppScript . Он существует уже много-много лет, он стабилен, разработчик великолепен, и больше всего он просто работает.
У него есть надежные методы, которые позволяют вам отправлять Apple Script, и он даже будет аккуратно возвращать вам ошибки без целой загрузки потенциально ошибочного и грязного кода, требующего их проверки.
Я использую его уже год без проблем. Если у вас есть другие вопросы о том, как это сделать, не стесняйтесь комментировать, и я постараюсь ответить на них.