C# 如何扩展Windows资源管理器的行为单击或扩展Shell行为

C# 如何扩展Windows资源管理器的行为单击或扩展Shell行为,c#,.net,shell,windows-shell,C#,.net,Shell,Windows Shell,是否有任何方法可以扩展或修改Windows资源管理器单击的行为 例如,我想修改click事件。单击驱动器时,我应该能够连接到FTP服务器,而不是打开驱动器。该驱动器将为安装式驱动器 因此,我想做的是修改Windows资源管理器单击的默认行为或扩展Shell的行为(我不确定这是否属于Shell扩展)。Hmya,这远远超出了“单击”的范围。您必须编写一个shell扩展。在.NET4.0之前,由于CLR版本注入问题,在C#中这样做是非常禁止的。非托管程序(比如记事本)在使用shell对话框(如Fold

是否有任何方法可以扩展或修改Windows资源管理器单击的行为

例如,我想修改click事件。单击驱动器时,我应该能够连接到FTP服务器,而不是打开驱动器。该驱动器将为安装式驱动器


因此,我想做的是修改Windows资源管理器单击的默认行为或扩展Shell的行为(我不确定这是否属于Shell扩展)。

Hmya,这远远超出了“单击”的范围。您必须编写一个shell扩展。在.NET4.0之前,由于CLR版本注入问题,在C#中这样做是非常禁止的。非托管程序(比如记事本)在使用shell对话框(如FolderBrowser或OpenFileDialog)时,会在其中注入CLR。这可能导致需要另一版本CLR的后续代码失败。解决了这个问题,CLR 4.0支持多个CLR版本的内存并行操作

没有解决的是您需要编写的代码的复杂性。Shell扩展需要COM代码。从IUnknown派生的硬接口。为了开始,您需要为COM接口编写大量声明。不能将它们从SDK声明中取出,它们只能由C++程序使用。而且它非常容易出错,C#不支持多重继承,您需要声明从其他接口派生的COM接口

最后但并非最不重要的一点是,调试此类代码是一场噩梦。这是您正在修补的一个基本Windows进程。犯错误会给你留下一个无法使用的外壳。重新启动会启动相同的borked shell

嗯,需要黑带技能。我认为.NET4.0的可用性应该启动一些提供友好的托管包装器的项目。我只是还没看到。也把这当作一个信号