从Windows API代码包扩展ExplorerBrowser以显示非文件系统文件

时间:2010-10-27 11:10:23

标签: c# .net winapi windows-7 windows-explorer

我正在用C#编写一个WPF程序,需要在文件浏览器中向最终用户呈现一组文件。在Microsoft Windows API CodePack中找到的ExplorerBrowser控件包含我需要的大部分功能......例如不同大小的缩略图,排序,浏览等...

问题在于文件不是来自磁盘,而是通过自定义网络传输协议提供。

我原本以为我可以简单地扩展ShellObjectContainer类和ShellObject类,通过构建适配器来提供我需要的功能。但是我遇到了困难,因为这些类使用内部构造函数。

总的来说,看起来这个API对扩展非常不利,无论如何都要扩展这些组件来做我需要的,或者我是否可以通过创建自定义WPF组件来重建大部分ExplorerBrowsers功能,可能是通过扩展ListBox? / p>

1 个答案:

答案 0 :(得分:1)

是的,这肯定不是可扩展的。除非您创建自己的shell命名空间扩展,否则很难看到如何在任何地方获得。这样它就可以在shell窗口中查看。这样做在托管代码中非常残酷,从IUnknown派生的shell的COM接口非常难以使用。这是API代码包中的包装类用于在托管程序中获取浏览器窗口的内容。

创建shell命名空间扩展是更好的解决方案,您的自定义文件也可以在常规资源管理器窗口中显示。但是在C ++中编写这种代码,都是因为它更容易获得COM代码并且避免在任何使用File + Open对话框的程序中注入CLR。虽然现在技术上支持.NET 4.0