使用BHO获取弹出窗口的URL,该如何解决
使用BHO获取弹出窗口的URL
使用BHO技术在函数中实现获取弹出窗口的URL地址,以下是该函数的源码
请问高手们在DISPID_NEWWINDOW2时该怎么取得弹出窗口的URL
------解决方案--------------------
你应该处理DISPID_NEWWINDOW3,它的参数有5个,第2个参数就是目标URL
使用BHO技术在函数中实现获取弹出窗口的URL地址,以下是该函数的源码
- C/C++ code
STDMETHODIMP CEyeAtIE::Invoke(DISPID dispidMember,REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pDispParams, VARIANT * pvarResult, EXCEPINFO * pexcepinfo, unsigned int FAR * puArgErr) { USES_CONVERSION; if ( !pDispParams ) return E_INVALIDARG; 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: { LPOLESTR lpURL = NULL; mWebBrowser2->get_LocationURL(&lpURL); char * strurl = NULL; /*if ( pDispParams->cArgs >= 5 && pDispParams->rgvarg[5].vt == (VT_BYREF|VT_VARIANT) ) { CComVariant varURL(*pDispParams->rgvarg[5].pvarVal); varURL.ChangeType(VT_BSTR); strurl = OLE2A(varURL.bstrVal); if ( !strstr(strurl, "about:blank") ) ::MessageBoxA( NULL, strurl, "提示", MB_OK ); }*/ if ( pDispParams->cArgs >= 6 && pDispParams->rgvarg[6].vt == VT_DISPATCH ) { CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> pDisp = pDispParams->rgvarg[6].pdispVal; if ( mWebBrowser2 == pDisp ) { CComVariant varURL(*pDispParams->rgvarg[5].pvarVal); varURL.ChangeType(VT_BSTR); strurl = OLE2A(varURL.bstrVal); //if ( !strstr(strurl, "about:blank") ) // 这里可以找出用户访问的URL // ::MessageBoxA( NULL, strurl, "提示", MB_OK ); // 用户访问的URL } } // 禁用该网页 //*pDispParams->rgvarg[0].pboolVal = TRUE; } break; case DISPID_NAVIGATECOMPLETE2: break; case DISPID_DOCUMENTCOMPLETE: break; case DISPID_DOWNLOADBEGIN: break; case DISPID_DOWNLOADCOMPLETE: break; case DISPID_NEWWINDOW2: // 设置是否允许弹出窗口,我想在这里获取弹出窗口的URL地址,请问该怎么得到 //READYSTATE m_ReadyState; //mWebBrowser2->get_ReadyState( &m_ReadyState ); if ( GetTickCount() - m_EyeAtIE.m_dktime > 500 ) { if ( m_EyeAtIE.m_bHoldUp && m_EyeAtIE.m_ToolhWnd != NULL ) { *pDispParams->rgvarg[0].pboolVal = TRUE; SendMessage( m_EyeAtIE.m_ToolhWnd, WM_IE_HOLD_EVENT, 0, 0 ); } } /* if ( m_ReadyState != READYSTATE_COMPLETE ) { *pDispParams->rgvarg[0].pboolVal = TRUE; }else { *pDispParams->rgvarg[0].pboolVal = FALSE; }*/ break; case DISPID_QUIT: RegisterEventHandler(FALSE); break; default: break; } return S_OK; }
请问高手们在DISPID_NEWWINDOW2时该怎么取得弹出窗口的URL
------解决方案--------------------
你应该处理DISPID_NEWWINDOW3,它的参数有5个,第2个参数就是目标URL