C# windows xp和vista任务栏上的工具栏 我已经制作了一个工具栏,我想从C语言中编写的SyStayAy应用程序中启用,实际的工具栏启用是使用C++ [DLimPurt]。< /P>完成的。

C# windows xp和vista任务栏上的工具栏 我已经制作了一个工具栏,我想从C语言中编写的SyStayAy应用程序中启用,实际的工具栏启用是使用C++ [DLimPurt]。< /P>完成的。,c#,windows,windows-xp,toolbar,C#,Windows,Windows Xp,Toolbar,我目前使用: SHLoadInProc(__uuidof(MyBandLoader)) 但在vista(不再实现SHLoadInProc)和带有IE6的Windows XP SP2(快速启动工具栏在重新启动后消失)上,此操作失败 在Vista上,我尝试使用:CocreateInstance()和BandSite->AddBand(),但使用工具栏dll的guid给了我一个分段错误或地址栏 在XP和Vista上,还有其他方法可以从另一个程序启用工具栏吗?我用过这个方法,但它只告诉你必须制作工具栏

我目前使用:

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

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


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

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

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

在Vista上,有一个新的文档不足的界面,名为ITrayDeskBand

通过COCCREATE实例创建一个实例,然后调用返回的指针(在C++中)显示PInvoke的“显示工具”(C++中的CLSID),我不确定如何在C语言中创建所有相关的位,可能更容易编写一个简单的C++ DLL来公开这个函数)

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


如果你要从那篇codeproject文章中提取代码,一定要小心——它充满了微妙的bug,尽管很多bug都在Vista的评论中讨论过,但有一个叫做ITrayDeskBand的新界面记录得很差

通过COCCREATE实例创建一个实例,然后调用返回的指针(在C++中)显示PInvoke的“显示工具”(C++中的CLSID),我不确定如何在C语言中创建所有相关的位,可能更容易编写一个简单的C++ DLL来公开这个函数)

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


如果您要从codeproject文章中提取代码,请务必小心-它充满了微妙的错误,尽管在注释中讨论了其中的许多错误

千万不要使用.Net在Explorer进程中创建任何COM对象。如果另一个.net组件使用的框架版本不同,并且已经加载到explorers进程中,那么这将不起作用。每个进程只有一个.net框架。微软不应该宣传用任何.net语言开发DeskBand的示例


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

绝对不能使用.Net在资源管理器进程内创建任何COM对象。如果另一个.net组件使用的框架版本不同,并且已经加载到explorers进程中,那么这将不起作用。每个进程只有一个.net框架。微软不应该宣传用任何.net语言开发DeskBand的示例


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

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