本文翻译自Launch Services Programming Guide,其中带删除线的API曾经被Apple标记为Deprecated。
本章总结了如何应用 Launch Services 在应用程序中执行常见工作。
关上我的项目
您要应用Launch Services来执行的最常见操作是关上应用程序,文档文件和URL。依据具体情况,您能够为此应用四个Launch Services性能中的任何一个: LSOpenFSRef , LSOpenFromRefSpec ,LSOpenCFURLRef
或LSOpenFromURLSpec
。
通过File-System Reference 关上我的项目
当您要关上的我的项目由file-system reference(FSRef
)标识时,最简略的关上办法是应用 -LSOpenFSRef- 。您只需提供file-system reference,Launch Services就以间接,简洁,默认的形式关上该我的项目:
如果指定的我的项目是应用程序:
- 如果该应用程序尚未运行,则将启动该应用程序并发送一个“ oapp”(“open application”)Apple事件。
- 如果该应用程序曾经在运行,则将其激活(显示在屏幕的后面)并发送一个“ rapp”(“reopen application””)Apple事件。
- 如果指定的我的项目是文档,则其首选的应用程序将启动(如果已运行,则将其激活),并发送Apple事件“ odoc”(“open document”),批示其打开文档。
LSOpenFSRef 顺次调用更通用的函数 LSOpenFromRefSpec ,这是“瑞士军刀”函数,可用于拜访关上应用程序和文档的所有选项。如果您须要申请默认行为以外的其余内容,则能够间接本人调用此函数。例如,您能够应用它来:
- 在雷同或不同的应用程序中一次关上多个文档
- 将文档在其本身首选应用程序以外的应用程序中强制关上
- 打开文档进行打印,而不是简略地查看或编辑
- 强制在Classic emulation环境中关上应用程序
- 关上指定的应用程序并暗藏所有其余应用程序
- 阻止将应用程序或文档增加到Finder的“最近的我的项目”菜单中
您也能够提供指向 launch specification 的指针,而不是间接应用对要关上的我的项目的file-system reference,该指针是一种类型为LSLaunchFSRefSpec
的数据结构,该数据结构标识了一个或多个我的项目以及无关如何关上它们的其余信息:
- 要关上一个或多个文档,请在launch specification的
itemRefs
字段中传递一个file-system reference的数组;numDocs
字段提供文档的数量。如果appRef
字段也不为空,则它指定要在哪个应用程序中打开文档。否则,每个文档将在其本人的首选应用程序中关上。 - 要在不指定任何文档的状况下关上应用程序,请在launch specification的
appRef
字段中将file-system reference传递给该应用程序,而后将itemRefs
字段设置为NULL,并将numDocs
设置为0。
Launch specification中的其余信息包含:
- 标记位(launchFlags)蕴含各种启动选项,用于管制关上应用程序的形式;请参阅 Launch Options
- 指向可选Apple事件描述符记录(passThruParams)的指针,该记录蕴含应用程序在关上时与Apple事件一起传递的参数信息
- 一个可选的援用常量(asyncRefCon),将传递给您的Carbon事件处理程序以进行异步启动告诉,如上一章“同步和异步启动”一节中所述
对于 LSOpenFSRef 和 LSOpenFromRefSpec ,输入参数outLaunchedRef
蕴含指向file-system reference的指针,该函数将设置该file-system reference来批示已关上的应用程序(如果在不同应用程序中关上了多个文档,则为第一个此类应用程序)。如果不须要此信息,则能够将此参数设置为NULL。
通过URL关上我的项目
要关上URL,请应用 Launch Services 函数 LSOpenCFURLRef
或LSOpenFromURLSpec
。它们相似于 LSOpenFSRef 和 LSOpenFromRefSpec ,然而承受Core Foundation URL references(CFURLRef)作为参数,而不是file-system references。当您具备要关上的应用程序或文档的文件系统路径名时,这些性能通常也很有用:您能够应用蕴含门路的scheme file
结构URL,而后应用该URL代替file-system references来关上文件系统门路。 LSOpenCFURLRef
和LSOpenFromURLSpec
函数是应用其余scheme(例如http,ftp或mailto)关上URL的惟一办法。
像用于file-system references的 LSOpenFSRef 一样,LSOpenCFURLRef
以默认形式在其首选应用程序中关上指定的URL。更通用的函数LSOpenFromURLSpec
承受launch specification(相似于 LSOpenFromRefSpec 的launch specification,但类型为LSLaunchURLSpec
而不是LSLaunchFSRefSpec
),它更具体地指定了URL的打开方式。与 LSOpenFromRefSpec 一样,如果您须要申请除LSOpenCFURLRef
提供的默认行为以外的其余内容,则能够间接本人调用此函数。
LSOpenCFURLRef
和LSOpenFromURLSpec
都确定要应用哪个应用程序关上指定的URL,启动该应用程序(如果曾经运行,则将其激活),并向其发送一个Apple事件,批示其关上URL。 (应用LSOpenFromURLSpec
,您能够通过在launch specification的appURL
字段中明确指定另一个应用程序来笼罩URL的首选应用程序。)通常,该应用程序会收到一个“ GURL”(“get URL”)Apple事件;然而,如果该URL的scheme是file
格局,并且该应用程序未声明承受该scheme的URL,则会向其发送一个“ odoc”(“open document”)Apple事件。
像file-system references中的对应文件一样,这两个基于URL的函数都能够抉择返回无关理论关上了哪个应用程序的信息(如果在不同的应用程序中关上了多个URL,则返回第一个)。该信息通过Core Foundation URL reference 传回,您能够在输入参数outLaunchedURL
中提供一个指针。如果应用程序的身份不重要,则能够将此参数设置为NULL。
查找我的项目的首选应用程序
要找到文档、URL或MIME类型的首选应用程序而不关上它,请别离应用Launch Services函数 LSGetApplicationForItem , LSGetApplicationForURL 或 LSCopyApplicationForMIMEType 。您能够通过对文档的file-system references(FSRef),对URL的Core Foundation URL references(CFURLRef)或对指定MIME类型的字符串的Core Foundation string reference(CFStringRef)来标识感兴趣的我的项目。另一个Launch Services函数 LSGetApplicationForInfo 能够找到由文档的文件类型、创建者签名、文件扩展名或这些特色的任意组合定义的文档系列的首选应用程序。
在每种状况下,您都必须提供一个角色掩码(LSRolesMask
),以指定应用程序应针对给定我的项目或我的项目系列申明的一个或多个角色(Editor, Viewer, or None)。 (请留神,“None”并不意味着“基本没有任何作用”,而是指应用程序能够针对该项目标承当特定的角色:提供标识信息(例如显示名称和图标文件)而实际上却不能关上我的项目自身。)如果您不在乎应用程序要求什么角色,请应用掩码值kLSRolesAll
。
要接管后果,您能够将指针传递到file-system references(在outAppRef
参数中),Core Foundation URL references(在outAppURL
参数中)或两者。 Launch Services将设置指定的数据结构以示意该项目标首选应用程序。如果您不心愿以这种模式接管后果,则能够为这些参数中的任何一个传递一个空指针,然而两个指针中的至多一个必须为非空。 (对于 LSCopyApplicationForMIMEType ,只有URL选项可用;没有outAppRef
参数。)
要查找能够以指定角色关上给定我的项目的所有已知应用程序,请应用 Launch Services 函数LSCopyApplicationURLsForURL
。只管此性能只能承受URL references,而不能承受file-system references,然而您也能够通过将带有scheme file
的URL传递给所需的文档,将其用于文档文件。
Launch Services 函数 LSFindApplicationForInfo 依据应用程序的名称、创建者签名、bundle ID或这些特色的任意组合来查找应用程序。 (请留神,这与LSGetApplicationForInfo的不同之处在于,指定的特色实用于应用程序自身,而不适用于它能够关上的文档。)与后面探讨的其余Launch Services函数一样,您能够将后果作为file-system references、URL或两者同时来接管,其中传递指向要相应信息的适当数据结构的指针。
测试应用程序是否能够关上我的项目
通常,找出给定的应用程序是否申明关上特定文档或URL的性能很有用。Launch Services 函数 LSCanRefAcceptItem 和LSCanURLAcceptURL
提供此信息。您提供对该我的项目和指标应用程序的file-system references 或URL references,以及管制该函数行为的某些技术方面的角色掩码和标记位;该函数通过设置一个布尔变量来响应,您能够向该变量提供一个指针,以批示应用程序是否能够承受指定的我的项目。
注册应用程序
通常,无需在Launch Services中显式注册应用程序,因为只有Finder晓得该应用程序,启动零碎或新用户登录,该操作就会主动为您实现(请参阅上一章“应用程序注册”)。在极少数状况下,您的确须要显式注册应用程序时(例如在自定义安装程序中),则能够应用Launch Services函数 LSRegisterFSRef 或LSRegisterURL
,具体取决于应用程序是通过file-system references还是Core Foundation URL reference。无论哪种状况,该应用程序及其文档绑定信息都将复制到Launch Services数据库中,从而使该应用程序可用于打开文档和URL。
获取无关我的项目的信息
您能够应用 Launch Services 函数 LSCopyItemInfoForRef 和 LSCopyItemInfoForURL 来获取无关file-system对象(例如应用程序,文档,文件夹或磁盘卷宗)的各种信息。您须要提供file-system references或Core Foundation URL reference(带有scheme file
)来标识感兴趣的我的项目,还要提供一个枚举变量(LSRequestedInfo
)指定所需的信息,并在其中指向我的项目信息记录(LSItemInfoRecord
)的指针以便接管信息。该记录中的信息能够包含我的项目的文件类型、创建者签名、文件扩展名以及形容我的项目属性的各种标记(请参阅上一章中的“我的项目信息”)。
有两个我的项目信息您可能会感觉有用,别离是它的显示名称(用于在屏幕上向用户显示其名称)和品种字符串(例如,在Finder的“显示简介”窗口或“我的项目”的“品种”列中应用) Finder的列表视图,以表征我的项目的个别性质,例如Application
、 Folder
、Alias
、JPEG Picture
、QuickTime Movie
或FrameMaker Document
。您能够应用 Launch Services 函数 LSCopyDisplayNameForRef 或 LSCopyDisplayNameForURL 取得显示名称,并应用 LSCopyKindStringForRef , LSCopyKindStringForURL , LSCopyKindStringForTypeInfo 或 LSCopyKindStringForMIMEType 获取类型字符串。