使用BHO获取弹出窗口的URL,该如何解决

使用BHO获取弹出窗口的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