一点编写 BHO 的思路,求指点

hbs_biscuit CSDN会员 hbs_biscuit 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好:
我写了一个BHO ,现在能做到的是 BHO 可以直接执行 IE 里面的 JS 方法。
同时我以如下方式 为 IE 的 IHTMLWindow 插入了一个我自己写的 IDispatch 对象
CComQIPtr<IHTMLDocument2> spDocument2 = spDisp;
CComPtr<IHTMLWindow2> spWin;
hr = spDocument2->get_parentWindow(&spWin);
if(SUCCEEDED(hr))
{
hr = spWin->QueryInterface(IID_IDispatchEx, (void **)&spDispEx);
DISPID dispid;
hr = spDispEx->GetDispID(CComBSTR("phonePlugInIE"),fdexNameEnsure,&dispid);
DISPPARAMS dispparams;
dispparams.rgvarg = new VARIANT;
//dispparams.rgvarg= new CComVariant("HELLO WORLD OBJECT");
DISPID dispidPut=DISPID_PROPERTYPUT;
dispparams.rgdispidNamedArgs=&dispidPut;
dispparams.cArgs = 1;
dispparams.cNamedArgs = 1;
IDispatch* dispatchPtr( this );
//IDispatch* phoneActionDisp;
//hr=pphoneConnector->pphoneAction->QueryInterface(IID_IDispatch,(void**)&phoneActionDisp);
//IDispatch* dispatchPtr(phoneActionDisp);
// dispatchPtr->GetIDsOfNames()
dispparams.rgvarg->pdispVal = dispatchPtr;
dispparams.rgvarg->vt = VT_DISPATCH;
VARIANT temp;
HRESULT result = spDispEx->InvokeEx( dispid, LOCALE_USER_DEFAULT ,
DISPATCH_PROPERTYPUT,
&dispparams , &temp , NULL , NULL );


这样使得我可以在 IE 的 JS 中直接以如下方式调用
window.phonePlugInIE.xxxmethod() 的方式调用 BHO 的功能

更进一步的想法:
如果我插入的 phonePlugInIE 对象可以 有 COM 事件放出来,那么我如何使用 JS 方便的接收呢。

bho 直接调用JS 方法的实现就不用谈了,我已经实现了,但是感觉有点儿绕。 我想让JS 相应我的对象的事件 ,就像 相应一个button 的OnClick 那样简单。

求指点
...全文

相关推荐

评论 17
收藏 已收藏
分享
返回顶部
hbs_biscuit CSDN会员
ATL 3,248 成员 48,530 内容