【问题标题】:Add custom menu items to the Finder context menu将自定义菜单项添加到 Finder 上下文菜单
【发布时间】:2011-09-21 15:26:27
【问题描述】:

如何将自定义菜单项添加到 Finder 中文件的上下文菜单?

不幸的是,Internet 和 Stack Overflow 上的大多数信息在 10.6 中都不起作用或太有限。例如,Automator 不允许您动态创建项目或创建子菜单。

我知道仍然可以做这种事情,因为 Dropbox 和 FolderGlance 都做类似的事情。有谁知道他们是如何实现的?

谢谢。

【问题讨论】:

  • 我相当肯定 Dropbox 使用 mach_inject。至于你如何使用那个项目来完成这个……这也是我想要弄清楚的。

标签: cocoa macos reverse-engineering finder


【解决方案1】:

不管怎样,Dropbox 现在使用mach_star 进行代码注入。显然,这是一个脆弱的解决方案。如果您查看他们的版本历史记录,他们的许多更新都是为了修复 finder 集成。

【讨论】:

    【解决方案2】:

    在 macOS 10.10+ 中,Finder Sync Extensions 可用于将项目添加到 Finder 上下文菜单。这就是现代版本的 Dropbox 和类似应用自定义右键菜单的方式。

    对于那些只想使用该功能而不是开发自己的应用程序扩展的人,我发布了一个 Mac 应用程序,允许任意自定义 Finder 同步扩展程序:

    Service Station - Mac App Store

    【讨论】:

    • 嗨,在docs 中提到您需要实现menuForMenuKind: 方法,将菜单种类作为参数传递给它。但它并没有说我应该从哪里调用带有参数的方法以及如何像你所做的那样设置图标。你能发布一些示例代码吗?这将非常有帮助。
    • @Isuru 当您实现menuForMenuKind: 时,您将覆盖该方法的默认实现。无需自己调用该方法... Finder 将在需要时调用它,现在获取您的自定义菜单而不是默认菜单。请务必将新的 Finder 同步扩展 Target 添加到您的应用中。当你这样做时,Xcode 会插入一堆样板代码,然后你可以修改。
    【解决方案3】:

    我下载了 FolderGlance,它似乎使用 osax(脚本添加)包将代码注入 Finder 进程。这绝对是脆弱且不受支持的。

    据我所知,将项目添加到 Finder 上下文菜单的唯一合法方法是创建服务,但这并不能解决您的问题。

    【讨论】:

      【解决方案4】:

      直到 OS X 10.9.x,仅通过 mach_inject 向 Finder 进程注入代码是一种解决方案(甚至 Dropbox 也这样做了)。 但是,从 10.10 开始,有 Finder 插件,可以自定义上下文菜单、将按钮添加到工具栏并覆盖文件图标。

      【讨论】:

        【解决方案5】:

        他们使用 CFPlugIn 添加他们的菜单项。

        更多信息在这里: http://developer.apple.com/library/ios/#documentation/CoreFoundation/Reference/CFPlugInRef/Reference/reference.html

        【讨论】:

        • 您能否详细说明如何使用CFPlugin 来完成此任务?
        • 这是“旧方式”,仅适用于 Leopard(不是 Snow Leopard)和旧版本的 OSX。
        猜你喜欢
        • 2014-06-03
        • 1970-01-01
        • 2012-10-24
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多