如何在基于IE的浏览器中装入google toolbar

这里说的方法适合任何IE toolbar,已经测试的包括:
- google toolbar
- MSN toolbar
- Sina DDT
- Yahoo toolbar

(0) 如果你还不了解下面几个接口的作用,请查询MSDN。

- IServiceProvide
- IInputObjectSite
- IOleWindow
- IWebBrowser2
- IDeskBand
- IObjectWithSite
- IInputObject

(1) google toolbar的classid为{2318C2B1-4965-11d4-9B18-009027A5CD4F},通过CoCreateInstance将其装入内存。

(2) 实现IUnknown接口,在其QueryInterface接口中,如果发现要查询的IID为IInputObjectSite时,调用自身实现的该对象,见(3)。

(3) 实现IInputObjectSite、IOleWindow、IServiceProvider接口。

- IServiceProvider接口的QueryService方法中,传入自身浏览器的IWebBrowser2。
- IInputObjectSite的OnFocusChangeIS,返回S_OK。
- IOleWindow的GetWindow,返回父窗口句柄。
- IOleWindow的ContextSensitiveHelp,返回S_OK。

(4) 得到gtb的IObjectWithSite接口,调用其SetSite方法,将自己的IUnknown接口传递给它。

(5) 此时gtb已经被创建,但是还处于隐藏状态。得到其IDeskBand接口,通过GetWindows方法得到它的窗口句柄。如果需要的话,使用::SetParent函数改变其父窗口。可以用::ShowWindow函数将它显示出来,之后调用ShowDW方法和IInputObject::HasFocusIO方法重设其内部的显示状态。

(6) 父窗口改变大小的时候,需要用IDeskBand::ResizeBorderDW通知gtb窗口大小已经改变,还必须用MoveWindow或者SetWindowPos真正改变其大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值