2011-03-27 50 views
4

因此,我搜索瞭如何使用C#將應用程序集成到應用程序(將其添加到右鍵單擊菜單)的指南,但我找不到如何做到這一點對於特定的文件類型。我知道這是可能的,因爲WinRar可以做到這一點。那我該怎麼做?Shell在Windows中與C#進行特定文件類型的集成

回答

7

通常有兩種方式可以實現這一點。

  1. 註冊表鍵 - 您可以在HKEY_CLASSES_ROOT下編寫鍵和值。如果你看一下這個配置單元,你會在你的電腦上看到擴展名。有關密鑰和值的詳細信息,請看article。有一些簡單的選項,可以在這裏用你的應用程序打開.myfile類型。這裏是一個File Association Example

  2. 外殼擴展(在COM書面):在這裏,你可以做更復雜的東西一樣Handlers.,他們將獲得由Windows調用,所以你可以做這樣的事情在菜單上的油漆,或添加自定義操作時,文件右鍵點擊。這裏比文件還多,你甚至可以添加屬性表和自定義工具提示。

有關不使用.NET編寫Shell處理程序**的一些talk。這僅適用於較舊的版本的.NET。 Its all ok with .NET4.

這篇文章應該可以幫助您與Context Menu Handler in .NET4

**爲什麼它不建議:

當你寫一個shell處理程序,它就會由主機進程調用(一般爲Windows資源管理器) ,但也包括FileOpenDialogs和FolderBrowser對話框。因此,如果你在.NET 2.0中編寫了一個外殼擴展,以及一個稱爲文件打開對話框的.NET 1.1應用程序,然後調用.NET 2.0 shell處理程序,並且您的.NET 1.1應用程序具有較舊的CLR,則會出現問題並會有版本衝突。

所以我很高興地發現了最後,這已經是.NET 4莫名其妙固定=)

+0

在如此多的進程中加載​​.net資源仍然存在資源浪費。 – CodesInChaos 2011-03-27 19:01:43

+0

你的意思是當.NET處理程序被注入主機進程?嗯,我猜。但** ** ** .NET的一個+1將是它比C++更容易編寫和維護的代碼。 (至少對我來說):)我記得Michael Dunn或Shell Handlers在C++中的這一系列文章,我在幾年前嘗試閱讀它們,但它很難掌握。 – gideon 2011-03-27 19:04:08

+0

問題是,有幾十個主機進程就像記事本一樣非常便宜,現在已經承擔了整個CLR的負擔。增加了很多。 – CodesInChaos 2011-03-27 19:08:43

1

Windows資源管理器右鍵菜單由註冊表控制。特別是,HKEY_CLASSES_ROOT配置單元。

一個很好的方式來得到一個好主意如何在那裏的一切工作是檢查出HKCR\.txt它顯示了右鍵菜單中的文本文件會發生什麼。查看指向「txtfile」的(默認)鍵。然後HKCR\txtfile將有一個子項HKCR\txtfile\shell\open\comman d。 (默認)鍵顯示打開notepad.exe的命令,其參數爲「%1」,表示正在打開的文件。用其他名稱替換打開的鍵(請參閱txtfile鍵中的打印和打印鍵)以將其他自定義命令添加到右鍵單擊菜單。

一旦您掌握了需要添加以集成應用程序的內容,您可以查看Microsoft.Win32 namespace的類以幫助通過c#代碼操作註冊表。

相關問題