Windows-7引入了虚拟文件夹的概念,称为“库”。
我正在使用我的自定义操作实现一个库。约束是,我必须坚持使用.NET版本2 :(
环顾四周,我没有找到任何本机(c/C++) API来做这件事。我计划一旦获得原生API,就使用Interop (p-Invoke)来创建一个库。
可以指向可能有帮助的链接或文档。如果我可以通过c# (使用.NET v2)直接做到这一点,那就太好了。
谢谢你,约翰
发布于 2011-11-25 17:18:02
“虚拟文件夹”的概念在Windows7之前就已经存在了,AFAIK刚刚被“改进”了……你写下你想要用你自己的自定义处理程序来做这件事...
如果您想实现这样的“虚拟文件夹”并将其集成到Windows中,以便其他应用程序可以将其用作“虚拟文件夹”,则:
实现和安装“外壳扩展”(基本上是一堆COM接口)的:
备注:如果你运行的系统没有.NET 4,微软建议不要使用.NET,因为旧版本的固有限制是一个进程不能同时运行多个框架版本。根据操作系统等情况,建议使用C/C++实现此功能。
即使使用.NET 4,正如评论中指出的那样,代码注入问题仍然存在-例如,如果任何.NET 4之前的.NET应用程序和/或与您的shell扩展不同的.NET版本访问文件打开对话框,它可能/将失败。
要绕过该,您需要实现一个本机代理DLL,它被加载到相应的进程(如Windows Explorer)中,并通过与您的.NET实现进行通信。
在这种特定情况下,您需要构建一个实现IShellLibrary的外壳扩展。
抛开shell扩展的实现不谈,这真的是一项艰巨的工作。一些信息/示例/源代码/库等的链接:
与Windows7库交互的请参阅http://support.microsoft.com/kb/976027 http://www.codeproject.com/KB/miscctrl/Windows7APICodePack.aspx和http://archive.msdn.microsoft.com/WindowsAPICodePack http://support.microsoft.com/kb/976027 http://www.codeproject.com/KB/cs/DDW7LibrariesLite.aspx。有些需要.NET 3.5,但因为3.5只是2.0加上一些额外的程序集,所以它可能是一个选择……
发布于 2011-11-25 17:16:51
似乎最相关的MSDN主题是:
库功能是通过COM公开的,因此不需要P/invoke。
然而,由于库只存在于Windows7中,而且Windows7将.net 3.5作为操作系统的一部分,我建议您将应用程序的这一部分放在.net 3.5程序集中。事实上,API CodePack程序集已经为您完成了这项工作。
当然,由于CodePack也是作为源代码提供的,因此您可以从中提取必要的部分,并执行必要的操作,以便针对.net 2.0构建它。
发布于 2011-11-25 17:10:55
在谷歌上简单搜索一下,发现了这个:How to programmatically manipulate Windows 7 shell libraries
如果api示例没有用处,应该可以导出c++示例中使用的C#方法。
https://stackoverflow.com/questions/8266736
复制相似问题