在BHO中拦截BeforeNavigate2

bright2k 2004-11-26 05:52:09
我在BHO中拦截BeforeNavigate2事件,
修改了事件的url参数,为什么不能实现地址转向??
部分代码如下:
STDMETHODIMP CAssistMain::Invoke(DISPID dispidMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult,
EXCEPINFO* pexcepinfo, UINT* puArgErr)
{
if (!pdispparams)
return E_INVALIDARG;
HRESULT hr = S_OK;
switch(dispidMember)
{
/*
* The parameters for this DISPID are as follows:
* [0]: Cancel flag - VT_BYREF|VT_BOOL
* [1]: HTTP headers - VT_BYREF|VT_VARIANT
* [2]: Address of HTTP POST data - VT_BYREF|VT_VARIANT
* [3]: Target frame name - VT_BYREF|VT_VARIANT
* [4]: Option flags - VT_BYREF|VT_VARIANT
* [5]: URL to navigate to - VT_BYREF|VT_VARIANT
* [6]: An object that evaluates to the top-level or frame
* WebBrowser object corresponding to the event.
*/
case DISPID_BEFORENAVIGATE2:
{
CComBSTR bstrUrl((*(pdispparams->rgvarg[5].pvarVal)).bstrVal);
CComBSTR bstrNewUrl(_T("http://www.google.com/"));
bstrNewUrl += bstrUrl;
(*(pdispparams->rgvarg[5].pvarVal)).bstrVal = bstrNewUrl.Detach();
}
break;

.......
}
...全文
179 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
duwenyong 2004-11-27
  • 打赏
  • 举报
回复
CComBSTR newURL = L"http://www.google.com/";
m_spWebBrowser2->Stop();
m_spWebBrowser2->Navigate(newURL, &pDispParams->rgvarg[4],&pDispParams->rgvarg[3],
&pDispParams->rgvarg[2],&pDispParams->rgvarg[1]);
蒋晟 2004-11-27
  • 打赏
  • 举报
回复
要cancel之后触发浏览器的Navigate2方法才行
kingzai 2004-11-26
  • 打赏
  • 举报
回复
case DISPID_BEFORENAVIGATE2:
char *str;
if (pDispParams->cArgs >= 5 && pDispParams->rgvarg[5].vt == (VT_BYREF|VT_VARIANT))
{
CComVariant varURL(*pDispParams->rgvarg[5].pvarVal);
varURL.ChangeType(VT_BSTR);
//转化要访问的网址为char *型
str = OLE2A(varURL.bstrVal);
}


3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧