1

我已经制作了一个工具栏,我想从用 C# 编写的系统托盘应用程序启用它,实际的工具栏启用是使用 [DLLImport] 从 C++ 部分完成的。

当前我使用:

SHLoadInProc(__uuidof(MyBandLoader))

但这在 vista 上失败(不再实现 SHLoadInProc),以及在带有 IE6 的 Windows XP SP2 上(重新启动后快速启动工具栏消失)。

在 Vista 上,我尝试使用:CocreateInstance() 和 BandSite->AddBand(),但是使用工具栏 dll 的 guid 给了我一个分段错误或地址栏。

在 XP 和 Vista 上是否有另一种方法可以从另一个程序启用工具栏?

4

3 回答 3

1

在 Vista 上,有一个新的文档记录不佳的界面,称为 ITrayDeskBand。

通过 CoCreateInstance 创建一个实例,然后在返回的指针上调用 ShowDeskBand([CLSID of your toolbar])(在 C++ 中 - 我不确定如何在 C# 中为 PInvoke 创建所有相关位 - 可能更容易编写一个简单的 C++ dll 来公开这个函数)

但这仅适用于 Vista,在 XP 上您需要继续使用上面的 SHLoadInProc 方法,因此您需要测试操作系统版本并执行适当的操作。

如果您从该 codeproject 文章中提取代码,请小心 - 它充满了微妙的错误,尽管其中许多在评论中进行了讨论

于 2009-01-14T17:42:39.487 回答
0

永远不要使用 .Net 在 Explorer 进程中创建任何 COM 对象。如果有另一个使用不同框架版本的 .net 组件已经加载到资源管理器进程中,这将不起作用。每个进程只有一个 .net 框架。MS 不应该用任何 .net 语言宣传有关开发桌带的示例。

在 Vista 上一个 up 的唯一方法是使用 ITrayDeskBand 界面来显示工具栏。但是,这将向用户显示一个确认框,他可以拒绝显示工具栏。

于 2010-11-22T13:31:06.913 回答
0

我用过那个,但它只告诉你必须制作一个工具栏,而不是如何从另一个程序启用它。

于 2008-12-05T11:52:31.530 回答