我正在尝试获取能够打开某种文件的应用程序列表。到目前为止,我已经能够使用NSWorkspace
的{{1}}方法获取单个应用程序的名称。
我是否可以调用任何API来获取能够打开文件的应用程序列表?
答案 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];
}