Windows XP和vista任务栏上的工具栏

时间:2008-12-04 13:37:57

标签: c# windows windows-xp toolbar

我创建了一个工具栏,我希望从用C#编写的系统托盘应用程序启用,实际的工具栏启用是使用[DLLImport]从C ++部分完成的。

目前我使用:

SHLoadInProc(__uuidof(MyBandLoader))

但这在vista上失败(SHLoadInProc不再实现),在Windows XP SP2上使用IE6(快速启动工具栏在重启后消失)。

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

是否有其他方法可以在XP和Vista上启用其他程序的工具栏?

3 个答案:

答案 0 :(得分:1)

在Vista上有一个名为ITrayDeskBand的新文档很少。

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

仅适用于Vista,在XP上你需要继续上面的SHLoadInProc方法,所以你需要测试操作系统版本并做适当的事情。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

永远不要使用.Net在Explorer进程中创建任何COM对象。如果使用已加载到资源管理器进程中的其他框架版本的另一个.net组件,这将无效。每个进程只有一个.net框架。 MS应该从未提供过以任何.net语言开发桌面频带的样本。

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