无法使用C#在shell扩展中添加图标

时间:2013-04-24 13:25:25

标签: c# shell-extensions

我找到了一个非常好的教程,我试图理解本教程中没有的东西(因为tut本身工作正常) http://www.codeproject.com/Articles/9163/File-Rating-a-practical-example-of-shell-extension

当您查看WinRar,TortoiseSVN,Antivirus-apps等应用程序时,Shell扩展项旁边会有一个图标。

我想知道这是怎么做到的。 (以编程方式使用C#)

添加分隔符有效,添加子菜单工作和点击+动作也有效,但我正在努力使用该图标。这可不是那么难。有人可以帮帮我吗?

请不要说Microsoft在.NET 4.0中不再支持此功能,因为它不能保证,因此它们不提供样本代码。如果所有其他应用都能做到,那么就有可能。

请提供一些示例代码,一些教程或者甚至是一段代码。

3 个答案:

答案 0 :(得分:2)

请查看以下文章,它使用.NET 4.0来使用SharpShell nuget包创建Windows Shell Extensions。

NET Shell Extensions - Shell Context Menus

使用此库,您可以在创建contextmenustrip时直接设置图像,如下所示

protected override ContextMenuStrip CreateMenu()
{
    //  Create the menu strip.
    var menu = new ContextMenuStrip();

    //  Create a 'count lines' item.
    var itemCountLines = new ToolStripMenuItem
    {
        Text = "Count Lines...",
        Image = Properties.Resources.CountLines
    };

    //  When we click, we'll count the lines.
    itemCountLines.Click += (sender, args) => CountLines();

    //  Add the item to the context menu.
    menu.Items.Add(itemCountLines);

    //  Return the menu.
    return menu;
}

答案 1 :(得分:2)

您只需要添加到以下注册表项:HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes * \ shellex \ ContextMenuHandlers 这是代码:

 string TimeStamp = DateTime.Now.ToString("dd-MM-yyyy");

string key = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\*\\shellex\\ContextMenuHandlers\\Winrar";
string valueName = "MyWinrar";
Microsoft.Win32.Registry.SetValue(key, valueName, HERE WHAT YOU WANT TO START, Microsoft.Win32.RegistryValueKind.String);

我希望它适合你!

答案 2 :(得分:0)

您列出的所有应用都使用COM和非托管代码来创建叠加图标处理程序。甚至还有一个特殊项目TortoiseOverlays为TortoiceCSV,TortoiseSVN和TortoiseGIT提供了一个用于绘制图标的通用库。您可以查看它的源代码,了解它是如何完成的。如果你想绘制类似的图标,你应该只是重复使用它。

不建议在此类扩展中使用.Net,因为当针对不同.Net版本构建的多个扩展会尝试加载资源管理器进程时,它们会使资源管理器崩溃。