使用c#创建windows-7库

时间:2011-11-25 09:03:13

标签: c# windows-7

Windows-7引入了一个名为“Libraries”的虚拟文件夹概念。

我正在使用自定义操作实现库。限制是,我必须坚持使用.NET版本2 :(

环顾四周时,我没有找到任何本地(c / C ++)API来执行此操作。我计划在获得本机API后使用Interop(p-Invoke)创建库。

任何人都可以指向可能有用的链接或文档。如果我能以某种方式直接从c#(使用.NET v2)执行此操作,那就太棒了。

谢谢你, 约翰

3 个答案:

答案 0 :(得分:4)

似乎最相关的MSDN主题是:

库功能通过COM公开,因此不需要P / invoke。

但是,由于库仅存在于Windows 7中,并且由于Windows 7将.net 3.5作为操作系统的一部分,因此我建议您将应用程序的这一部分放在.net 3.5程序集中。实际上API CodePack程序集已经为你做了这个。

当然,由于CodePack也是作为源提供的,因此您可以从那里提取必要的部分,并根据.net 2.0进行构建。

答案 1 :(得分:3)

“虚拟文件夹”的概念已经存在于Windows 7之前,并且AFAIK刚刚“精炼”......你写的是你想用你自己的自定义处理程序来做...

如果您想要实现这样的“虚拟文件夹”并将其集成到Windows中,以便其他应用程序可以将其用作“虚拟文件夹”,那么:

实现并安装“shell扩展”(基本上是一堆COM接口):

备注:如果您运行的系统没有.NET 4,那么Microsoft建议不要使用.NET,因为旧版本的固有限制是一个进程无法运行多个框架版本同时。根据操作系统等情况,建议使用C / C ++实现 即使在评论中指出了.NET 4,代码注入问题仍然存在 - 即,如果.NET 4之前的任何.NET应用程序和/或与shell扩展不同的.NET版本访问文件打开对话框,例如它可以/会失败。
要绕过,您需要实现一个本机代理DLL,该DLL被加载到相应的进程(如Windows资源管理器)中,并通过IPC与您的.NET实现进行通信。

在这种特定情况下,您需要构建一个实现IShellLibrary

的shell扩展

除了shell扩展的实现是一项非常艰巨的工作......一些链接信息/样本/源代码/库等:。

要与Windows 7库进行交互,请参阅http://support.microsoft.com/kb/976027http://www.codeproject.com/KB/miscctrl/Windows7APICodePack.aspx以及http://archive.msdn.microsoft.com/WindowsAPICodePackhttp://www.codeproject.com/KB/cs/DDW7LibrariesLite.aspx。有些需要.NET 3.5,但由于3.5只是2.0加上一些额外的程序集,它可能是一个选项......

答案 2 :(得分:0)

在谷歌中进行简单搜索,发现:How to programmatically manipulate Windows 7 shell libraries

如果C#示例没用,应该可以导出c ++示例中使用的api方法。