【问题标题】:Selective Context Menu in Explorer资源管理器中的选择性上下文菜单
【发布时间】:2020-11-20 23:38:23
【问题描述】:

我想添加一个上下文菜单选项,以便更深入地集成我的一个程序。但是,我讨厌这个频繁使用的菜单中有 20 多个项目 - 所以我不会让我的最终用户也忍受这种情况。

我知道上下文菜单可以按文件类型自定义,但 Tortoisegit 可以自定义通用文件夹。

Tortoisegit 能够检测何时在由 Tortoisegit 控制的文件夹中打开上下文菜单并显示带有其他项目的不同菜单。

这是怎么做到的?这是由 Tortoisegit 以某种方式在后台运行的,还是上下文菜单的注册表设置,或其他什么?

【问题讨论】:

    标签: winapi c#-4.0 contextmenu tortoisegit windows-shell-extension-menu


    【解决方案1】:

    这是通过注册表设置完成的。运行 regedit.exe 并导航到 HKCR\Folder\shellex\ContextMenuHandlers。您将在该列表中找到 Tortoise 的 CLSID。 HKCR\* 注册表项同样特殊,它适用于任何文件。

    强烈建议不要在 C# 中编写 shell 扩展,无法将 CLR 注入到进程中是无法诊断的。

    【讨论】:

    • 谢谢,似乎有很多 Windows API 不应该在 C# 中使用。您能否提供您的源文档以供我和 Stack Overflow 参考? Google 只能找到普通用户的简单教程。
    • 使用winapi就好了,没有问题。只是将托管代码注入其他进程很麻烦。 Shell 扩展实在是太有影响力了。您的代码不仅被注入到资源管理器中,它还被注入到使用 shell 对话框的任何程序中,例如 OpenFileDialog。
    • 我发现一篇文章说 .Net 4.0+ 允许本地注入 shell 菜单处理程序。这些可以调试,但只能在沙盒 Visual Studio 环境中进行。
    • 不,这已经工作过了。 .NET 4.0+ 的特别之处在于它允许加载多个版本的 CLR。但这仍然是先有鸡还是先有蛋的问题,如果先加载旧版本的 CLR,那么您仍然会失败。用户完全无法诊断,并且 shell 扩展加载顺序无法调整。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多