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

Bry*_*yle 8 macos cocoa

我正在尝试获取能够打开某种文件的应用程序列表.到目前为止,我已经能够得到使用单个应用程序的名称NSWorkspacegetInfoForFile:application:type:方法.

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

Jos*_*zzi 11

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

似乎你传入一个文件URL,你应该得到你的(CFArrayRef)应用程序列表.


Bry*_*yle 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];
}
Run Code Online (Sandbox Code Playgroud)