2012-02-28 2 views
3

Приложения в OS X, которые могут открывать файлы для запуска своих приложений, часто позволяют пользователю выбрать приложение, которое откроет файл. Примером может служить Finder.Как реализовать контекстное меню «Открыть с» в OS X

Я до сих пор неясно, какое наилучшее решение для реализации этого. Проблемы - это производительность и отображение значка приложения.

Во-первых, чтобы получить список приложений, я нашел только LSCopyApplicationURLsForURL().

Основная трудность для меня теперь - получить значки приложений. Все, что у меня есть, это URL-адреса (пути) к приложениям. Единственный способ получить значки - создать объект CFBundle, а затем прочитать plist приложения, чтобы получить данные значка. Но это, похоже, вызывает много дискового доступа, и я мог представить, что это будет довольно неэффективно, если приложение расположено на удаленном файловом сервере.

Я считаю, что есть также кэшированная база данных о приложениях, которая включает в себя значки и отображаемые имена (без расширения) и т. Д. Но где API для этого?

Примечание: приложение основано на углероде, но при необходимости я могу использовать функции какао (NS ...). Также будет оценена поддержка 10,5, даже 10,4.

ответ

0

Хорошо. Я решил это в конце концов.

Теперь я использую функцию Carbon GetIconRefFromFileInfo(), которая все еще работает в Lion, хотя она отмечена устаревшей/устаревшей.

Я также пытался использовать QLThumbnailImageCreate(), но это не принесло мне никаких результатов, как ни странно. Не знаю, что я сделал не так.

Для приложений Cocoa можно использовать [[NSWorkspace sharedWorkspace] iconForFile: путь] (спасибо C. Grunenberg из DevonTechnologies за этот совет, где он используется с EasyFind).

Смежные вопросы