使用 ShellSharp

當你需要多級選單時,SharpShell 可以通過多個引數進行救援。 https://github.com/dwmkerr/sharpshell 有很多例子,即使對於單級到多級自定義上下文選單也是如此。

關鍵是要建立具有屬性[ComVisible(true)]和[COMServerAssociation(AssociationType.AllFiles)]的類,並繼承實現 CanShowMenu 和 CreateMenu 函式的 fromSharpContextMenu 類,你需要通過 Sharpshell 建立者推薦的 regasm 工具或 ServerRegistrationManager 註冊程式集。

[ComVisible(true)]
[COMServerAssociation(AssociationType.AllFiles)]
public class AdvancedContextMenu : SharpContextMenu
{
    
    protected override bool CanShowMenu()
    {
        //  We can show the item only for a single selection.
    }
    protected override ContextMenuStrip CreateMenu()
    {
        //  Create the menu strip.
        var menu = new ContextMenuStrip();
        ... add any level of ToolStripMenuItems and add them to menu
        return menu
    }
}

更多細節可以在 https://github.com/dwmkerrhttp://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-Context-Menus 獲得