【问题标题】:Toolbar on windows xp and vista taskbarwindows xp 和 vista 任务栏上的工具栏
【发布时间】:2010-09-25 07:57:53
【问题描述】:

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

我现在使用的:

SHLoadInProc(__uuidof(MyBandLoader))

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

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

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

【问题讨论】:

  • 你找到答案了吗?我正在尝试做同样的事情(从 NSIS 安装程序自动启用工具栏)

标签: c# windows windows-xp toolbar


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-21
        • 1970-01-01
        • 1970-01-01
        • 2012-12-03
        • 2012-02-20
        相关资源
        最近更新 更多