我正在尝试获取能够打开某种文件的应用程序列表.到目前为止,我已经能够得到使用单个应用程序的名称NSWorkspace的getInfoForFile:application:type:方法.
是否有任何API可以调用以获取能够打开文件的应用程序列表?
Jos*_*zzi 11
我相信您需要使用Launch Services来获取列表.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];
}
Run Code Online (Sandbox Code Playgroud)