2009-12-03 92 views
33

我想寫一個小工具,即執行以下操作:集成到Windows資源管理器右鍵菜單

當你右鍵點擊一個特定的文件擴展名的文件在Windows資源管理器上下文菜單中顯示的附加條目。

當您單擊此條目時,某個EXE將以此文件作爲其參數之一啓動。

我想爲此使用C#/ .NET 2.0。如果這是不可能的,我也可以用C++/Win32來完成。

我的問題是:

  1. 是否有可能與C#.NET 2.0?
  2. 集成到Windows資源管理器上下文菜單中的必要功能是什麼?
  3. 我該如何使這永久? (我不想在每次啓動後重新啓動此工具)
  4. 我需要特別照顧什麼? (不同的操作系統,安全權限等)

回答

4

所有你需要做的就是添加一些東西到註冊表中。所以是的,你可以用.NET 2.0來做到這一點。這是一個example of how to add Edit with Notepad

如果我沒有記錯,%1是選定的文件。

+2

這不會在Vista和Win7下工作。只有在XP和2000下。我不知道爲什麼。 –

+1

我認爲註冊表路徑是不同的,但它應該仍然工作:http://www.vistax64.com/tutorials/89829-start-menu-customize-context-menu.html –

22

您需要訪問註冊表並在root\\File\\shellroot\Folder\\shell下添加一個密鑰,具體取決於您希望菜單項可見的項目。

嘗試this article at CodeProject,這是非常有用的。

編輯:有another article here這可能是有幫助的。

+0

http://www.codeproject.com /KB/cs/dateparser.aspx – Kiquenet

+0

+1,用於鏈接到偉大的「簡單外殼上下文菜單」項目。 –

+0

仍然有用,謝謝Mark –

3

順便說一句,由於目前無法在同一進程中託管多個運行時版本(.NET 4將解除此限制),因此不支持將.NET用於shell擴展。

考慮一下你有兩個shell擴展的情況;一個用於.NET 3.5,一個用於.NET 1.哪個運行時將加載到您的進程中?那麼,它或多或少是隨機的 - 它取決於哪個外殼擴展首先被加載。有時它可能是2.0運行時,有時可能是1.1運行時。

這也是一個問題,如果一個.NET程序創建通用文件對話框;你的shell擴展可能會或可能不會加載,並且可能會或可能不會運行正確的運行時版本。

因此,如果你下了Shell extension route你應該使用本地C++/COM/Win32。

+0

最新的.Net 4.0運行時支持使用早期的.Net運行時並行加載.Net 4.0運行時(以及所有未來的運行時)。 請參閱從http://msdn.microsoft.com/en-us/magazine/ee819091.aspx 以下摘錄「,具有在多進程運行時與其他運行時的能力,我們現在可以提供編寫託管普遍支持外殼擴展 - 甚至是那些在機器上運行的任意應用程序。「 – logicnp

相關問題