【发布时间】:2009-12-22 22:06:14
【问题描述】:
我正在尝试获取能够打开某种文件类型的应用程序列表。到目前为止,我已经能够使用NSWorkspace 的getInfoForFile:application:type: 方法获取单个应用程序的名称。
我可以调用任何 API 来获取能够打开文件的应用程序列表吗?
【问题讨论】:
我正在尝试获取能够打开某种文件类型的应用程序列表。到目前为止,我已经能够使用NSWorkspace 的getInfoForFile:application:type: 方法获取单个应用程序的名称。
我可以调用任何 API 来获取能够打开文件的应用程序列表吗?
【问题讨论】:
我相信您需要使用启动服务来获取列表。 LSCopyApplicationURLsForURL "找到所有适合打开由 URL 指定的项目的已知应用程序。"
如果你传入一个文件 URL,你应该得到你的 (CFArrayRef) 应用程序列表。
【讨论】:
为了将来参考,我特别感兴趣的是获取能够打开特定文档类型的应用程序列表。接受的答案指向正确的方向,但不是一个完整的解决方案,因为LSCopyApplicaionURLsForURL 及其兄弟LSCopyAllRoleHandlersForContentType 返回一个包标识符,而不是应用程序本身。因此我仍然需要应用程序的:
下面是我用来检索所有这些信息的代码:
NSArray* handlers = LSCopyAllRoleHandlersForContentType(@"com.adobe.pdf", kLSRolesAll);
for (NSString* bundleIdentifier in handlers) {
NSString* path = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier: bundleIdentifier];
NSString* name = [[NSFileManager defaultManager] displayNameAtPath: path];
NSImage* icon = [[NSWorkspace sharedWorkspace] iconForFile: path];
}
【讨论】: