2009-12-22 23 views
7

我試圖獲得能夠打開文件類型的應用程序列表。到目前爲止,我已經能夠使用NSWorkspacegetInfoForFile:application:type:方法獲得單個應用程序的名稱。獲取能夠打開文件類型的應用程序列表

是否有任何API可以調用以獲取能夠打開文件的應用程序列表?

回答

10

我相信你需要使用Launch Services來獲得一個列表。 LSCopyApplicationURLsForURL「找到所有適用於打開由URL指定的項目的已知應用程序。」

似乎如果你傳遞一個文件的URL,你應該得到你的(CFArrayRef)應用程序列表。

9

爲了將來的參考,我特別感興趣的是獲取能夠打開特定文檔類型的應用程序列表。接受的答案指向正確的方向,但不是一個完整的解決方案,因爲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]; 
} 
相關問題