我正在编写一个BHO(浏览器帮助对象),它捕获用户输入的地址检查它,并且取决于结果执行cretin操作。
BHO挂钩浏览器事件,然后我抓住DISPID_BEFORENAVIGATE2事件并做我的事情。
我的问题是我们的用户都有一个内部代理服务器,有时会在发生这种情况时阻止网站我在DISPID_BEFORENAVIGATE2事件中获得的地址是代理返回的地址,当我真正需要的地址是用户键入的地址时英寸
任何人都知道在我被提到代理人之前我怎么能抓住地址?
答案 0 :(得分:0)
我找到了解决方法。 我从浏览器对象获取URL,所以我实际得到的是显示的页面,因为代理消息是重定向,它从未显示过,所以我从未见过它。
我现在已经切换到从DISPID_BEFORENAVIGATE2参数中获取URL:
LPTSTR CBhoApp::varToStr(VARIANT var)
{
USES_CONVERSION;
if(var.vt == VT_BSTR)
{
LPTSTR psz = new TCHAR[SysStringLen(var.bstrVal)];
lstrcpy(psz, OLE2T(var.bstrVal));
return psz;
}
else
return NULL;
}
STDMETHODIMP CBhoApp::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
BSTR bstrUrlName;
LPTSTR psz;
if(dispidMember == DISPID_BEFORENAVIGATE2)
{
//This is the parameter for the URL.
VARIANT* tmp = pDispParams->rgvarg[5].pvarVal;
psz = varToStr(*tmp);
.
.
.
}
}