Shell 图标叠加 (C#)

发布于 2024-07-19 02:25:17 字数 93 浏览 7 评论 0原文

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

谢谢, -肖恩!

I need a method to create Icon Overlay's for Folders and Files in Windows XP/Vista, using C# or C++? Any examples?

Thanks,
-Sean!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小草泠泠 2024-07-26 02:25:17

不要不要这样做! 拜托,请不要。

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

这里解释了为什么您不能这样做。

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

更新:
尽管从 .NET4 开始,一个进程中可以有多个框架版本,但 Microsoft 仍然推荐且不支持!
请参阅帖子了解原因:

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

Do not do this! Please, please don't.

You will break a lot of applications. Shell extensions must not use the .net framework (or any other similar framework), ever.

Here's an explanation why you must not do this.

Write your extension in C/C++, but not C#.

Update:
Even though as of .NET4 it's possible to have multiple framework versions in one process, it is still not recommended and not supported by Microsoft!
See this post about why:

[...] These problems led us to officially recommend against—and not support—the development of in-process shell extensions using managed code.

北恋 2024-07-26 02:25:17

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

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

文档片段:

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

Tigris' TortoiseSVN product heavily uses icon overlays provided by library shared by several Tortoise products, the overlays themselves are written in C++ rather than C#.

The documentation for the TortoiseOverlays project explains how they use it and the problems they have encountered (username: guest, empty password), and the GPL'ed sourcecode is in the Subversion repository (same username/password as above).

Snippit from documentation:

TortoiseOverlays registers itself with the explorer to handle the nine
states mentioned above, i.e. it registers nine overlay handlers. The
explorer process initializes the TortoiseOverlays handler, calling its
IShellIconOverlayIdentifier::GetOverlayInfo(). TortoiseOverlays looks
for the registered overlay handlers under
HKLM\Software\TortoiseOverlays\Statusname and calls their
GetOverlayInfo() method so they can initialize too (Note that any
change to the icon name, index, ... your handler does are overwritten
later and won't be used - it's TortoiseOverlays that handles the icons
now). After the initialization, TortoiseOverlays relays every call to
its IShellIconOverlayIdentifier::IsMemberOf() method to the other
handlers. The first handler that returns S_OK determines whether the
icon is shown or not.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文