获取能够打开一种文件的应用程序列表

时间:2009-12-22 22:06:14

标签: cocoa macos

我正在尝试获取能够打开某种文件的应用程序列表。到目前为止,我已经能够使用NSWorkspace的{​​{1}}方法获取单个应用程序的名称。

我是否可以调用任何API来获取能够打开文件的应用程序列表?

2 个答案:

答案 0 :(得分:11)

我相信您需要使用Launch Services来获取列表。 LSCopyApplicationURLsForURL“找到适合打开由URL指定的项目的所有已知应用程序。”

如果你传入一个文件URL,你应该得到你的(CFArrayRef)应用程序列表。

答案 1 :(得分:8)

为了将来参考,我特别感兴趣的是获取能够打开特定文档类型的应用程序列表。接受的答案指向正确的方向,但不是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];
}