我在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; .......
}
修改了事件的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; .......
}
解决方案 »
- VS2008下,VC单文档程序这样调用VC写的OCX对吗
- volatile变量使用的疑惑
- QQ三国。句柄得到了,可是OPENPROCESS没有权限,怎么才能读到内存呢。有个CE工具能读到,他是怎么实现 的呢。望高手指点!!
- 急!!如何获取当前连接的显示器数目?
- 如何得知当前程序所在的物理硬盘?
- 两个SourceSafe,怎么保持一致呀?
- 在运行中怎么样判断我调用的COM组件是否已经当掉?
- 很菜的一道题目各位大哥帮帮忙!!
- 如何在98下向其他进程申请内存?就向VirtualAllocEx一样。
- 各位大虾、龙虾请进!在C/S模型中,使用面向连接的协议,使用异步CAsyncSocket如何实现通过服务器中转。(分可以再加)
- 什么情况下内存直接赋值会无效?
- 问一个在VC6.0下使用STL的问题(基本问题,望高手执教)
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);
}
m_spWebBrowser2->Stop();
m_spWebBrowser2->Navigate(newURL, &pDispParams->rgvarg[4],&pDispParams->rgvarg[3],
&pDispParams->rgvarg[2],&pDispParams->rgvarg[1]);