Вопрос Резюме:
1) как я могу получить путь к текущему активному приложению под OSX? (т.е. приложение, которому принадлежит текущее окно ключа)
2) из этого мне нужно определить обычно связанный файл .icns для этого приложения (т. Е. Изображение, которое видоискатель показывает, когда вы смотрите на это приложение в папке «Приложения» и в списке приложений, который появляется, когда вы нажмите клавишу команды (яблоко) Tab *
Подробное описание вопроса:
Я разрабатываю панель утилит OSX (плавающее окно), которая должна отображать имя и изображение значка для текущего приложения (например, приложения, которому принадлежит окно, которое в данный момент является «ключом».
1) Мне нужен какой-то способ программного определения «пути к папке .app» приложения, которое в настоящее время является основным и ключевым. Это может быть либо через обратный вызов уведомления, либо что-то, что я могу опрашивать по таймеру и запускать свои собственные обратные вызовы.
2) Я вижу, что найти файлы .icns вручную в папке XXX.app/Resources довольно легко, однако проблема в том, что в этой папке иногда находится более 1 файла .icns, и я не вижу простого способа определить только из имени файла правильную иконку, обычно ассоциируемую с приложением - хотя многие приложения используют то же имя, что и приложение (с расширением icns), некоторые - нет.
Например,
safari имеет совершенно не связанное имя "compass.icns". где-то должен быть файл, который сообщает Finder, какой файл использовать - или вызов API для этого, у кого-нибудь есть идеи? NSApplication имеет метод applicationIconImage, который, очевидно, возвращает значок для МОЕ приложения - это не то, что я хочу - насколько я знаю, нет никакого способа создания экземпляра NSApplication для другого приложения, и не было бы никакого реального смысла делать это, как большинство методов / свойства - это вещи, которые являются частными для этого приложения.
что бы это ни стоило, я портирую утилиту Windows на OSX - если бы я делал это под Windows, я бы использовал GetWindowProcessID (GetForegroundWindow)), и использовал это, чтобы определить путь к приложению, и извлечь значок из что с помощью LoadIcon