代码之家  ›  专栏  ›  技术社区  ›  Bryan Kyle

获取能够打开文件类型的应用程序列表

  •  8
  • Bryan Kyle  · 技术社区  · 16 年前

    NSWorkspace getInfoForFile:application:type:

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

    2 回复  |  直到 16 年前
        1
  •  11
  •   Ky -    8 年前

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

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

        2
  •  8
  •   Bryan Kyle    16 年前

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