我試圖獲得能夠打開文件類型的應用程序列表。到目前爲止,我已經能夠使用NSWorkspace
的getInfoForFile:application:type:
方法獲得單個應用程序的名稱。獲取能夠打開文件類型的應用程序列表
是否有任何API可以調用以獲取能夠打開文件的應用程序列表?
我試圖獲得能夠打開文件類型的應用程序列表。到目前爲止,我已經能夠使用NSWorkspace
的getInfoForFile:application:type:
方法獲得單個應用程序的名稱。獲取能夠打開文件類型的應用程序列表
是否有任何API可以調用以獲取能夠打開文件的應用程序列表?
我相信你需要使用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];
}