IE BHO c ++在标签之间共享数据

时间:2011-09-03 12:32:11

标签: c++ multithreading internet-explorer communication bho

我希望我的IE扩展的BHO实例能够共享公共数据。我只需要他们分享几个变量,所以我试图找到一个简单的问题解决方案。

我能想到的替代方案是:从简单到复杂:

1)向/从文件系统或注册表写入/读取数据,请参阅MSDN articleCodeproject article问题:是否可以从在不同线程中运行的BHO实例访问此信息?

2)开发与所有BHO实例通信的Windows服务或后台应用程序,请参阅MSDN article问题:我没有IDEA如何制作这个,或者从哪里开始。我担心用户必须安装很多东西。

3)提供IPC机制,以便不同的BHO实例可以直接相互通信。与使用 IGlobalInterfaceTable 一样,请参阅ookii article问题:是的,您可以在此 IGlobalInterfaceTable 中存储指针并获取Cookie以便重新访问它们,但是如何在BHO实例1中与BHO实例2共享一个Cookie,以便第二个实例可以访问第一个插入 IGlobalInterfaceTable 中的数据?我们不是再次遇到相同的数据共享问题吗?

嗯,正如您所看到的,经过一整周寻找解决方案后,我根本不知道如何开始处理这个问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

通常,内存映射文件用于此目的。但是,这是一项非常重要的工作,因为您必须确保它们是正确的ACL,以允许跨进程访问(每个选项卡可能在不同的进程中)并跨多个完整性级别工作。

答案 1 :(得分:1)

除了普通网站可以写的地方{1}外,有一种类型。

2编写服务可能是最简单的方法,因为有大量关于如何编写Windows服务的文档(如果使用Visual C ++,您甚至可以获得ATL项目向导),并且您的代理代码可以在选项卡进程中存活崩溃甚至是用户注销。

3确实您再次遇到相同的共享问题,除非您可以更改消息过滤器,否则UIPI会阻止COM消息,但不会记录COM使用的消息。我会使用像命名管道/内存文件映射之类的东西。

您需要在某处托管通信代理代码,并且只创建一次。你可以写一些像isolated from a trusted web site can access中的计算机(有点讨厌),或者有一个代理进程来进行通信工作(例如在windows服务中)。