2013-04-24 99 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); 

我希望對你有用!