[ATL/IE]DISPID_FILEDOWNLOAD,下载管理器
[ATL/IE高手进]DISPID_FILEDOWNLOAD,下载管理器?
写了一个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;
------解决方案--------------------
这样不好定位问题,建议使用插入法调试(可以使用messagebox),跟一下你的BHO执行到哪里?
------解决方案--------------------
同步这段代码
写了一个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;
------解决方案--------------------
这样不好定位问题,建议使用插入法调试(可以使用messagebox),跟一下你的BHO执行到哪里?
------解决方案--------------------
同步这段代码