使用c#创建windows-7库

本文关键字:windows-7 创建 使用 | 更新日期: 2023-09-27 18:15:56

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

我正在用我的自定义动作实现一个库。限制是,我必须坚持使用。net版本2:

环顾四周,我没有找到任何本地(c/c++) API来做这件事。我计划使用互操作(p- invoke)来制作一个库,一旦我得到本地api。

有没有人可以提供一个链接或文档,可能会有所帮助。如果我能以某种方式直接从c#(使用。net v2)做到这一点,那将是伟大的。

谢谢你,约翰。

使用c#创建windows-7库

最相关的MSDN主题是:

  • Inside Windows 7:Introducing Libraries
  • <
  • Windows库/gh>
  • Windows 7 Libraries: Developer Resources

库的特性是通过COM公开的,所以不需要p/invoke。

然而,由于库只存在于Windows 7中,并且由于Windows 7将。net 3.5作为操作系统的一部分,我建议您将这部分应用程序放在。net 3.5程序集中。事实上,API CodePack程序集已经为您完成了这些工作。

当然,由于CodePack也是作为源代码交付的,因此您可以从中提取必要的部分,并执行所需的操作,以便针对。net 2.0构建它。

"虚拟文件夹"的概念在Windows 7之前就已经存在了,只是被"精炼"了一下…你写你想用你自己的自定义处理程序…

如果你想实现这样一个"虚拟文件夹",并将其集成到Windows中,以便其他应用程序可以使用它作为一个"虚拟文件夹",那么:

实现和安装一个"shell扩展"(基本上是一堆COM接口):

备注:如果你运行的系统没有。net 4,那么微软建议不要使用。net,因为旧版本的固有限制,一个进程不能同时运行多个框架版本。根据操作系统等情况,建议使用C/c++实现此功能。
即使是在。net 4中,正如在注释中指出的那样,代码注入问题仍然存在——例如,如果任何。net应用程序在。net 4之前和/或与你的shell扩展不同的。net版本访问文件打开对话框,它可能/将会失败。
为了规避,你需要实现一个本机代理DLL,它被加载到各自的进程中(如Windows资源管理器),并通过IPC与。net实现通信。

在这种情况下,你需要构建一个shell扩展来实现IShellLibrary。

shell扩展的实现是一项非常艰巨的工作…一些信息/示例/源代码/库等链接:

  • http://msdn.microsoft.com/en-us/library/windows/desktop/bb774328%28v=VS.85%29.aspx
  • http://blogs.msdn.com/b/codefx/archive/2010/09/14/writing - windows -壳-扩展- -网-框架- 4 c - vb -网- - 1.部分aspx
  • http://www.ssware.com/ezshell/ezshell.htm
  • http://www.codeproject.com/KB/shell/ratingcolumn.aspx?q=shell +扩展+ c % 23
  • http://www.codeproject.com/KB/shell/shellextguideindex.aspx
  • http://www.nirsoft.net/utils/shexview.html
  • http://social.msdn.microsoft.com/forums/en - us/netfxbcl/thread/1428326d - 7950 - 42 - b4 - ad94 - 8 e962124043e/

与Windows7库交互参见http://support.microsoft.com/kb/976027和http://www.codeproject.com/KB/miscctrl/Windows7APICodePack.aspx以及http://archive.msdn.microsoft.com/WindowsAPICodePack和http://www.codeproject.com/KB/cs/DDW7LibrariesLite.aspx。有些需要。net 3.5,但由于3.5只是2.0加上一些额外的程序集,这可能是一个选择…

在google中简单搜索,发现了这个:如何以编程方式操作Windows 7 shell库

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