6

我需要一种方法来使用 C# 或 C++ 在 Windows XP/Vista 中为文件夹和文件创建图标覆盖?有什么例子吗?

谢谢,-肖恩!

4

2 回答 2

10

要这样做!请,请不要。

你会破坏很多应用程序。Shell 扩展永远不能使用 .net 框架(或任何其他类似框架)。

这是一个解释为什么你不能这样做。

用 C/C++ 编写你的扩展,而不是 C#。

更新:尽管从 .NET4 开始,可以在一个进程中拥有多个框架版本,但微软仍然推荐也不支持它!请参阅这篇文章了解原因:

[...] 这些问题导致我们正式建议反对(而不是支持)使用托管代码开发进程内 shell 扩展。

于 2009-05-09T16:10:09.813 回答
7

Tigris 的TortoiseSVN产品大量使用由多个 Tortoise 产品共享的库提供的图标覆盖,这些覆盖本身是用 C++ 而不是 C# 编写的。

TortoiseOverlays 项目的文档解释了他们如何使用它以及他们遇到的问题(用户名:guest,空密码),GPL 的源代码在Subversion 存储库中(与上面相同的用户名/密码)。

来自文档的片段:

TortoiseOverlays 向资源管理器注册自己来处理上面提到的九个状态,即它注册了九个覆盖处理程序。资源管理器进程初始化 TortoiseOverlays 处理程序,调用它的 IShellIconOverlayIdentifier::GetOverlayInfo()。TortoiseOverlays 在 HKLM\Software\TortoiseOverlays\Statusname 下查找已注册的覆盖处理程序并调用它们的 GetOverlayInfo() 方法,以便它们也可以初始化(请注意,对图标名称、索引的任何更改......您的处理程序所做的任何更改都会在稍后被覆盖并赢得'不被使用 - 现在是 TortoiseOverlays 处理图标)。初始化之后,TortoiseOverlays 会将对其 IShellIconOverlayIdentifier::IsMemberOf() 方法的每个调用中继到其他处理程序。返回 S_OK 的第一个处理程序确定是否显示图标。

于 2009-05-09T15:49:45.907 回答