Как определить, основано ли приложение на документе? - PullRequest
2 голосов
/ 20 марта 2009

Я разрабатываю приложение Какао / Objective C, которое читает активный документ из любого приложения, используя AppScript. Я успешно выполнил эту часть, но было бы неплохо точно сказать, основано ли приложение на документе или нет.

Очевидный подход состоит в том, чтобы взглянуть на атрибут AXDocument активного окна в приложении, и если оно содержит путь, мы знаем, что приложение основано на документе. Однако это не работает, если документ не сохранен. Это также довольно неуклюже. Скорее досадно, но атрибут AXDocument может появиться в приложении без документов, поэтому его наличие или отсутствие нельзя использовать для предоставления информации, которую я ищу.

Я пытался просмотреть другие свойства и атрибуты, предоставляемые через AppleScript как процесса приложения, так и одного окна. Похоже, что ни один из этих пунктов точно не говорит мне, основано ли приложение на документе или нет.

Я также пытался просмотреть несколько файлов Info.plist, но не вижу ничего, что достоверно указывает на это. Я просто не выгляжу достаточно усердно? Или есть хороший способ сделать это в Objective C или AppleScript?

Ответы [ 3 ]

2 голосов
/ 25 марта 2009

Приложение на основе документов, созданное в соответствии с руководством Архитектура приложений на основе документов , должно удовлетворять нескольким условиям. Я не уверен, если / как можно получить доступ к различным приложениям в Mac OS, но с отражением (в Objective-C) вы можете проверить наличие подкласса NSDocument. Другая идея заключается в том, чтобы просто посмотреть на пункты меню ... Есть ли в меню Файл -> Создать, Файл -> Открыть записи?

1 голос
/ 05 апреля 2009

Другой идеей будет поиск AXImage, представляющего значок прокси в строке заголовка; документы без названия можно просто сопоставить, проверив заголовок окна на «без названия» или его локализованный эквивалент.

(Некоторые приложения включают значок прокси даже для документов без названия, но многие этого не делают.)

1 голос
/ 25 марта 2009

Возможно, вы захотите найти ключ CFBundleDocumentTypes в Info.plist пакета приложения. Это обычно присутствует для приложений на основе документов, так что тип документа может быть связан как с расширением, так и с классом, который его загружает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...