描述:
写了一个BHO截获点击IE超链接下载的消息,
同时屏蔽IE默认的下载管理器,弹出定制的下载管理器,
类似flashget,迅雷.
这里有三个问题相问:
1.sink DISPID_FILEDOWNLOAD,在定制的下载管理器cancel的时候,允许弹出IE下载管理器,用下面语句,
*pDispParams->rgvarg[0].pboolVal = VARIANT_FALSE;
问题出来了,会弹出IE默认的下载管理器,但是不去sink DISPID_ONQUIT,直接退出,在debug的时候,引起IE break,这是为什么呢?
2.通过IE收藏菜单点击的链接也sink DISPID_FILEDOWNLOAD,有时候是起定制的下载管理器,有什么办法能屏蔽这种操作也能起下载管理器吗?
3.在频繁点击链接的时候,偶尔会引起IE崩溃,review了好多次代码,不知道究竟什么地方引起IE break,通常引起IE break的原因有哪些呢?
case DISPID_FILEDOWNLOAD:
{
if( pDispParams->cArgs > 0 )
{
BSTR bstrURL = NULL;
HRESULT hr = m_pWebBrowser->get_LocationURL( &bstrURL );
if( S_OK == hr )
{
*pDispParams->rgvarg[0].pboolVal = VARIANT_TRUE;
if(TRUE == RunAppToDownload()) // to start my download manager
{
if(m_bDownload == TRUE) //a flag if my download manager is run
*pDispParams->rgvarg[0].pboolVal = VARIANT_TRUE;//disable ie download manager
else
*pDispParams->rgvarg[0].pboolVal = VARIANT_FALSE;//enable ie download manager
}
else
*pDispParams->rgvarg[0].pboolVal = VARIANT_FALSE;
}
}
}
break;
解决方案1:
同步这段代码
解决方案2:这样不好定位问题,建议使用插入法调试(可以使用messagebox),跟一下你的BHO执行到哪里?
您可能想查找下面的文章:
- 请问怎样在DISPID_AMBIENT_DLCONTROL中实现下载控制?
- 在DISPID_BEFORENAVIGATE2事件中如何判断是否为IFRAME事件?
- 请教各位,如何修改控件暴露的接口方法的dispid,具体描述见内。
- 想截取鼠标在IE工作区左键点击事件,可是每次都截取到超过5次DISPID_HTMLELEMENTEVENTS_ONCLICK事件
- DISPID起什么作用?
- 获取IE弹出窗口的问题(DISPID_NEWWINDOW2)
- 还有的DISPID叫啥名字呢?
- DISPID_BEFORENAVIGATE2事件
- 关于DISPID_ONADDRESSBAR
- 编译的时候说:DISPID_BEFORENAVIGATE2没有定义