3

前几天我问了一个关于覆盖图标的问题。在帮助下,我想出了如何让它发挥作用。

以下是图标覆盖的工作原理(据我所知):在外壳绘制图标之前,它会联系系统中的所有图标覆盖处理程序以确定它是否应该在该特定图标上绘制覆盖。

我的设置:
我有一个注册的外壳扩展(图标覆盖处理程序),我想用它来显示图标覆盖。此外,我有一个 .NET 应用程序 (C#),它将使用我想要显示覆盖的所有文件和文件夹的名称等写入数据库(最有可能是 SQLite)。

我的问题是:
如何让 Shell 扩展(我认为它基本上是一个 COM DLL)回调到我的 .NET 应用程序中?或者这是否有点矫枉过正,我应该直接从数据库中读取 Shell Extension 吗?

可能的解决方案?

  1. 让外壳扩展(图标覆盖处理程序)读取数据库并确定是否显示覆盖。
  2. 让外壳扩展调用回 .NET 应用程序以确定是否显示覆盖。

我希望这是有道理的,如果没有,我会尝试详细说明。

4

2 回答 2

2

COM DLL 不能直接与 .NET 程序集对话。您可能需要将 .NET 程序集公开为 COM 对象并改为与此 COM 对象通信。但这实际上在您的场景中可能是矫枉过正。另一种选择是将与 .NET 程序集中的数据库通信的功能公开为一些可从 shell etension 调用的可互操作服务 (WCF?)。

于 2009-05-12T19:19:24.613 回答
2

是的,如果您将程序集标记为 COM 可见并运行 regasm,那么您的 COM dll 可以导入生成的类型库并调用 CoCreateInstance 以获取对您的 .NET 类的引用。

但是,将 .NET 框架拉到 shell 扩展中有点吓人。因此,您可能希望确保在进程外调用 .NET 代码......即 CLSCTX_LOCAL _SERVER 到 CoCreateInstance。

于 2009-05-12T20:13:28.787 回答