2009-12-22 24 views
7

Tôi đang cố gắng lấy danh sách các ứng dụng có khả năng mở một loại tệp. Cho đến nay tôi đã có thể lấy tên của một ứng dụng đơn bằng cách sử dụng phương thức getInfoForFile:application:type: của NSWorkspace.Lấy danh sách ứng dụng Có khả năng mở một loại tệp

Có API nào mà tôi có thể gọi để nhận danh sách các ứng dụng có khả năng mở tệp không?

Trả lời

10

Tôi tin rằng bạn cần sử dụng Dịch vụ khởi chạy để có danh sách. LSCopyApplicationURLsForURL "Định vị tất cả các ứng dụng đã biết phù hợp để mở một mục được chỉ định bằng URL".

Dường như nếu bạn chuyển vào URL của tệp, bạn sẽ nhận được danh sách ứng dụng (CFArrayRef) của mình.

9

Để tham khảo trong tương lai, tôi đặc biệt quan tâm đến việc có được danh sách các ứng dụng có khả năng mở một loại tài liệu cụ thể. Câu trả lời được chấp nhận chỉ đúng hướng nhưng không phải là giải pháp hoàn chỉnh như LSCopyApplicaionURLsForURL và anh chị em của nó LSCopyAllRoleHandlersForContentType trả về mã định danh gói, chứ không phải chính ứng dụng. Vì vậy, tôi vẫn cần thiết của ứng dụng:

  • Đường dẫn
  • Tên hiển thị; và
  • Biểu tượng

Dưới đây là đoạn code tôi đã sử dụng để lấy tất cả các thông tin mà:

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]; 
} 
Các vấn đề liên quan