Задачи служб запуска

Эта глава подводит итог, как использовать Launch Services для выполнения общих задач в приложении.

Открытие элементов

Наиболее распространенная работа, которую Вы захотите выполнить с Launch Services, открывает приложения, файлы документов и URLs. В зависимости от обстоятельств можно использовать любую из четырех функций Launch Services с этой целью: LSOpenFSRef, LSOpenFromRefSpec, LSOpenCFURLRef, или LSOpenFromURLSpec.

Открытие элементов ссылкой файловой системы

Когда элемент, который Вы хотите открыть, идентифицируется ссылкой файловой системы (FSRef), самый простой способ открыть его с LSOpenFSRef. Вы просто предоставляете ссылку файловой системы, и Launch Services открывает элемент прямым, упрощенным, способом по умолчанию:

  • Если определяемый элемент является приложением:

    • Если приложение уже не работает, оно запускается и отправляется 'oapp' («открытое приложение») событие Apple.

    • Если приложение уже работает, оно активируется (выявленный экрана) и отправило 'rapp' (“вновь открывают приложение”), событие Apple.

  • Если определяемый элемент является документом, его предпочтительное приложение запускается (или активируется, если он уже работал), и отправленный 'odoc' (“открывают документ”), событие Apple, дающее ему команду открыть документ.

LSOpenFSRef поочередно вызывает более общую функцию LSOpenFromRefSpec, функция «швейцарского ножа», обеспечивающая доступ к полному спектру опций для вводных приложений и документов. Можно вызвать эту функцию непосредственно сами, если необходимо запросить что-то другое, чем поведение по умолчанию. Например, можно использовать его для:

  • Откройте больше чем один документ за один раз, или в тех же или в различных приложениях

  • Вынудите документ открыться в приложении кроме его собственного предпочтительного приложения

  • Открытые документы для печати, а не для простого просмотра или редактирования

  • Вынудите приложение открыться в Классической среде эмуляции

  • Откройте указанное приложение и скройте всех других

  • Препятствуйте тому, чтобы приложение или документ были добавлены к меню Finder's Recent Items

Вместо прямой ссылки файловой системы на элемент, который будет открыт, Вы предоставляете указатель на спецификацию запуска, структуру данных типа LSLaunchFSRefSpec это идентифицирует один или несколько элементов вместе с дополнительной информацией о том, как открыть их:

  • Для открытия одного или более документов передайте массив ссылок файловой системы в спецификации запуска itemRefs поле; numDocs поле говорит, сколько существует. Если appRef поле является также ненулем, оно указывает приложение, в котором можно открыть документы; иначе, каждый документ будет открыт в его собственном предпочтительном приложении.

  • Для открытия приложения, не указывая документов передайте ссылку файловой системы на приложение в спецификации запуска appRef поле и набор itemRefs поле к NULL и numDocs к 0.

Дополнительная информация в спецификации запуска включает:

  • Слово флага (launchFlags) содержа различные опции запуска управлять способом, которым открыто приложение; посмотрите Опции Запуска

  • Указатель на дополнительную запись дескриптора события Apple (passThruParams) содержа информацию о параметре, которая будет передана с событием Apple, приложение получает на открытии

  • Дополнительная ссылочная константа (asyncRefCon) быть переданным Вашей подпрограмме обработчика событий Углерода для асинхронных уведомлений запуска, как описано под Синхронным и Асинхронным Запуском

Для обоих LSOpenFSRef и LSOpenFromRefSpec, выходной параметр outLaunchedRef содержит указатель на ссылку файловой системы, которую функция установит для указания приложения, открытого (или первое такое приложение, в случае многократных документов, открытых в различных приложениях). Если эта информация не имеет интереса, можно установить этот параметр на NULL.

Открытие элементов URL

Для открытия URL Вы используете функцию Launch Services LSOpenCFURLRef или LSOpenFromURLSpec. Они походят LSOpenFSRef и LSOpenFromRefSpec, но примите Базовую Основу ссылки URL (CFURLRef) вместо ссылок файловой системы. Эти функции также часто полезны, когда у Вас есть путь файловой системы к приложению или документу, который будет открыт: можно создать URL со схемой file содержание пути и затем использует этот URL вместо ссылки файловой системы для открытия элемента. LSOpenCFURLRef и LSOpenFromURLSpec функции являются единственным способом открыть URLs с другими схемами, такой как http, ftp, или mailto.

Как LSOpenFSRef для ссылок файловой системы, LSOpenCFURLRef открывает определяемый URL в его предпочтительном приложении способом по умолчанию. Более общая функция LSOpenFromURLSpec принимает спецификацию запуска (аналогичный тому для LSOpenFromRefSpec но типа LSLaunchURLSpec вместо LSLaunchFSRefSpec) указание более подробно способ, которым должен быть открыт URL. Как с LSOpenFromRefSpec, можно вызвать эту функцию непосредственно сами, если необходимо запросить что-то другое, чем поведение по умолчанию, предоставленное LSOpenCFURLRef.

Оба LSOpenCFURLRef и LSOpenFromURLSpec определите, что приложение использовать для открытия указанного URL запустите приложение (или активируйте его, если это уже работает), и отправьте ему событие Apple, дающее ему команду открыть URL. (С LSOpenFromURLSpec, можно переопределить предпочтительное приложение URL’s путем явного обозначения другого приложения в спецификации запуска appURL поле.) Обычно, приложение получает a 'GURL' (“получают URL”), событие Apple; но если схема URL’s file и приложение не утверждает, что приняло URLs с этой схемой, оно отправляется 'odoc' (“открывают документ”), событие Apple вместо этого.

Как их дубликаты для ссылок файловой системы, обе из ОСНОВАННЫХ НА URL функций могут дополнительно возвратить информацию, о которой приложение было фактически открыто (или первое, в случае многократного URLs, открытого в различных приложениях). Эта информация пасуется назад через Базовую Основу ссылка URL, на которую Вы предоставляете указатель в выходном параметре outLaunchedURL. Можно установить этот параметр на NULL если идентификационные данные приложения не имеют интереса.

Нахождение предпочтительного приложения элемента

Для нахождения предпочтительного приложения для файла документа URL или тип MIME, не открывая его, использует функцию Launch Services LSGetApplicationForItem, LSGetApplicationForURL, или LSCopyApplicationForMIMEType, соответственно. Вы идентифицируете элемент интереса со ссылкой файловой системы (FSRef) к документу, Базовая Основа ссылка URL (CFURLRef) к URL или Базовой Основе представляют ссылку в виде строки (CFStringRef) к строке, указывающей тип MIME. Другая функция Launch Services, LSGetApplicationForInfo, считает предпочтительное приложение для семейства документов определенным их типом файла, подписью создателя, расширением файла или любой комбинацией этих характеристик.

В каждом случае необходимо предоставить ролевую маску (LSRolesMask) указание того или большего количества ролей (Editor, Viewer, или None) то, что приложение должно требовать относительно данного элемента или семьи элементов. (Обратите внимание на то, что None не означает “роли вообще”, а скорее относится к определенной роли, которой приложение может требовать относительно элемента: это предоставления информации идентификации, такой как имя дисплея и файл значка без фактически способности открыть сам элемент.), Если Вы не заботитесь, что роль требования приложения, используйте значение маски kLSRolesAll.

Для получения результата Вы передаете указатель на ссылку файловой системы (в outAppRef параметр), Базовая Основа ссылка URL (в outAppURL параметр), или оба; Launch Services установит определяемую структуру данных для обращения к предпочтительному приложению элемента. Можно передать нулевого указателя для любого из этих параметров, если Вы не хотите получить результат в той форме, но по крайней мере один из этих двух указателей должен быть ненулем. (В случае LSCopyApplicationForMIMEType, только опция URL доступна; существует нет outAppRef параметр.)

Для нахождения всех известных приложений, которые могут открыть данный элемент с указанной ролью используйте функцию Launch Services LSCopyApplicationURLsForURL. Несмотря на то, что эта функция может только принять ссылку URL и не ссылку файловой системы, можно использовать ее для файлов документов также путем передачи URL со схемой file обращение к желаемому документу.

Функция Launch Services LSFindApplicationForInfo определяет местоположение приложения на основе его имени, подписи создателя, пакет ID или любая комбинация этих характеристик. (Обратите внимание на то, что это отличается от LSGetApplicationForInfo в этом заданные характеристики применяются к самому приложению, а не к файлам документов оно может открыться.) Как с другими функциями Launch Services, обсужденными ранее, можно получить результат или как ссылку файловой системы, URL или как обоих, передающими указателями на надлежащие структуры данных, чтобы быть заполненными информацией.

Тестирование, может ли приложение открыть элемент

Часто полезно узнать, требует ли данное приложение возможности открыть определенный документ или URL. Функции Launch Services LSCanRefAcceptItem и LSCanURLAcceptURL предоставьте эту информацию. Вы предоставляете или ссылки файловой системы или ссылки URL на элемент и целевое приложение, вместе с ролевой маской и словом флага, управляющим определенными техническими аспектами поведения функции; функция отвечает путем установки Логической переменной, к которой Вы обеспечиваете указатель, чтобы указать, может ли приложение принять определяемый элемент.

Регистрация приложения

Не обычно необходимо зарегистрировать приложение явно в Launch Services, так как это сделано для Вас автоматически каждый раз, когда приложение становится известным Средству поиска, система загружается, или новый пользователь входит в систему (см. Регистрацию приложений). В тех редких случаях, когда действительно необходимо зарегистрировать приложение явно (такой как в пользовательской программе установщика), можно использовать функцию Launch Services LSRegisterFSRef или LSRegisterURLВ зависимости от того, идентифицируется ли приложение со ссылкой файловой системы или Базовой Основой ссылка URL. В любом случае приложение и его информация о привязке документа копируются в базу данных Launch Services, делая приложение доступным для вводных документов и URLs.

Получение информации об элементе

Можно использовать функции Launch Services LSCopyItemInfoForRef и LSCopyItemInfoForURL получить множество информации об объектах файловой системы, таких как приложения, документы, папки или объемы. Вы предоставляете ссылку файловой системы или Базовую Основу ссылка URL (со схемой file) идентифицировать элемент интереса, вместе со словом флага (LSRequestedInfo) указание информации Вы хотите и указатель на информационную запись элемента (LSItemInfoRecord) в котором можно получить назад информацию. Информация в этой записи может включать тип файла элемента, подпись создателя, расширение файла и различные флаги, описывающие атрибуты элемента (см. информацию об Элементе).

Два других данных об элементе, который можно счесть полезным, являются его именем дисплея (используемый для отображения его имени к пользователю на экране) и его добрая строка (используемый, например в окне Finder's Get Info или столбце Kind представления списка Средства поиска, для охарактеризования общего характера элемента, такой как Application, Folder, Alias, JPEG Picture, QuickTime Movie, или FrameMaker Document). Можно получить имя дисплея с функцией Launch Services LSCopyDisplayNameForRef или LSCopyDisplayNameForURL и добрая строка с LSCopyKindStringForRef, LSCopyKindStringForURL, LSCopyKindStringForTypeInfo, или LSCopyKindStringForMIMEType.