在注册表

时间:2015-11-17 21:27:40

标签: c# .net windows

我需要我的应用程序来创建右键单击上下文菜单项(和子菜单项)。我不关心代码 - 但我不知道如何在注册表中创建子菜单项。它不像人们期望的那样符合逻辑。

我已经无数次搜索过,现在正式放弃搜索。

我知道我们可以使用regedit.exe创建一个上下文菜单项,方法是转到shell键并添加一个新的但是如何创建像7zip这样的子菜单项?

Shows newly-created context menu item in the windows registry

2 个答案:

答案 0 :(得分:2)

查看此Code-Project文章:Add a context menu to the Windows Explorer。使用.net框架提供的Registry类似乎非常容易。

一些更高级/更好的解决方案似乎正在使用某些库,例如:SharpShell

修改

请查看:.NET Shell Extensions - Adding submenus to Shell

这部分应该解决你的问题:

// <summary>
// Creates the context menu when the selected item is a folder.
// </summary>
protected void MenuDirectory()
{
    ToolStripMenuItem MainMenu;
    MainMenu = new ToolStripMenuItem
    {
        Text = "MenuDirectory",
        Image = Properties.Resources.Folder_icon
    };

            ToolStripMenuItem SubMenu1;
            SubMenu1 = new ToolStripMenuItem
            {
                Text = "DirSubMenu1",
                Image = Properties.Resources.Folder_icon
            };

            var SubMenu2 = new ToolStripMenuItem
            {
                Text = "DirSubMenu2",
                Image = Properties.Resources.Folder_icon
            };
            SubMenu2.DropDownItems.Clear();
            SubMenu2.Click += (sender, args) => ShowItemName();

                    var SubSubMenu1 = new ToolStripMenuItem
                    {
                        Text = "DirSubSubMenu1",
                        Image = Properties.Resources.Folder_icon
                    };
                    SubSubMenu1.Click += (sender, args) => ShowItemName();

    // Let's attach the submenus to the main menu
    SubMenu1.DropDownItems.Add(SubSubMenu1);
    MainMenu.DropDownItems.Add(SubMenu1);
    MainMenu.DropDownItems.Add(SubMenu2);

    menu.Items.Clear();
    menu.Items.Add(MainMenu);
}

答案 1 :(得分:0)

您必须创建一个命令文件夹,例如 Archive,有两个命令:A 和 B。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Archive]
"MUIVerb"="Archive"
"SubCommands"="Windows.A;Windows.B"

键中的 * 表示在任何文件上单击鼠标右键都会显示此菜单。如果您只需要 *.7z 文件,请使用 HKEY_CLASSES_ROOT\.7z\shell\Archive。 MUIVerb 的值将是菜单项的名称。如果您将 MUIVerb 命名为 7-Zip,则右键菜单将包含两个 7-Zip 项目。

然后在那里创建命令:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.A]
"MUIVerb"="Command name of A"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.A\command]
@="notepad.exe \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.B]
"MUIVerb"="Command name of B"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.B\command]
@="notepad.exe \"%1\""

在这个例子中,你得到一个存档菜单项,有级联的两个命令,用记事本打开当前文件。它适用于 Windows 7 和更新版本。