2013-04-24 115 views
2

添加图标,我发现了一个很不错的教程,我想了解的东西,是不是在本教程中(因为啧啧本身工作正常) http://www.codeproject.com/Articles/9163/File-Rating-a-practical-example-of-shell-extension不能在外壳扩展与C#

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

我想知道这是如何完成的。 (以编程方式与C#)

添加一个分隔符的工程,添加一个子菜单的作品,并点击+动作也可以,但我正在努力与该图标。这并不难。有人能帮助我吗?

请不要说Microsoft不再支持.NET 4.0中的这一点,因为它不能保证,因此它们不提供样例代码。如果所有其他应用都可以这样做,那么这是可能的。

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

+0

有趣的问题 - +1和收藏。 – 2013-04-25 02:07:37

回答

2

请看下面的文章,它使用.NET 4.0创建使用SharpShell nuget包的Windows Shell扩展。

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; 
} 
0

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

不推荐使用.Net作为这种类型的扩展,因为当针对不同的.Net版本构建的多个扩展会尝试在explorer进程中加载​​时,它们会使浏览器崩溃。

+0

我不想使用乌龟的图标of-course ;-)但我自己..但谢谢,我会看看他们的图书馆。 – stackr 2013-04-24 13:36:24

+0

另请注意,总图标数量有一个系统限制 - 大约为15.任何Tortoise将使用大约8-10,某些文件同步工具可能会使用另一个4-5。所有未覆盖此限制的叠加层都不会绘制。 – alex 2013-04-24 13:38:09

+0

我打算只使用1,这样不会是问题:-) – stackr 2013-04-24 14:01:30

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); 

我希望对你有用!