如何在OS X中实现“打开方式”上下文菜单

时间:2012-02-28 11:04:08

标签: macos contextmenu macos-carbon

OS X中可以打开文件以启动其各自应用程序的应用程序通常会让用户选择将打开该文件的应用程序。一个例子是Finder。

我仍然不清楚实现这一目标的最佳解决方案是什么。挑战是性能并显示应用程序的图标。

首先,要获取应用列表,我发现只有LSCopyApplicationURLsForURL()。

现在我遇到的主要困难是获取应用程序图标。我所拥有的只是应用程序的URL(路径)。我知道获取图标的唯一方法是创建一个CFBundle对象,然后读取应用程序的plist以获取图标数据。但这似乎侵犯了大量的磁盘访问权限,而且我可以想象如果应用程序位于远程文件服务器上,效率会非常低。

我相信还有一个关于应用程序的缓存数据库,其中包括图标和显示名称(没有扩展名)等。但那里的API在哪里?

注意:该应用程序是基于碳的,但如果需要,我可以使用Cocoa(NS ...)函数。此外,支持10.5,甚至10.4,将不胜感激。

1 个答案:

答案 0 :(得分:0)

好的。我最终解决了。

我现在使用Carbon函数GetIconRefFromFileInfo(),它仍在Lion中运行,虽然它被标记为已弃用/已废弃。

我曾尝试使用QLThumbnailImageCreate(),但奇怪的是,这并没有给我任何结果。不知道我做错了什么。

对于Cocoa应用程序,可以使用[[NSWorkspace sharedWorkspace] iconForFile:path](感谢DevonTechnologies的C. Grunenberg提供的这个技巧,它与EasyFind一起使用)。