IWebBrowser2响应
class as:public IDispatch
{
virtual HRESULT  STDMETHODCALLTYPE Invoke(
DISPID dispidMember, 
REFIID riid,
LCID lcid, 
WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO*  pExcepInfo,
UINT* puArgErr)
{... case DISPID_NEWWINDOW2:
IWebBrowser2 *pIE;
 hr = CoCreateInstance(CLSID_InternetExplorer, NULL, 
CLSCTX_SERVER, IID_IWebBrowser2, 
(void**)&pIE);
if (hr == S_OK)
{
IDispatch *p;
//pIE->AddRef();
pIE->get_Application(&p);
//p->QueryInterface(pDispParams->rgvarg[1].ppdispVal);
*pDispParams->rgvarg[1].ppdispVal=p;
//LPOLESTR lpURL=NULL;
BSTR lpURL=SysAllocString(L"http://localhost"); 
pIE->put_RegisterAsBrowser(1);
hr=pIE->get_LocationURL(&lpURL);//此处一直为失败
hr=pIE->get_LocationName(&lpURL);//此处一直为失败
if (hr == S_OK)
{
m_strNewUrl=lpURL;
}
pIE->Release();
...
}}如上,在响应NEWWINDOW2时,临时创建了一个IWebBrowser2,试图获取新打开窗口的url,却一直获取失败,各位看看是怎么回事,有解决方法没? 

解决方案 »

  1.   

    1、你用新创建的IWebBrowser2去获取原有的IWebBrowser2中的url,这么做是否可以,能获取到么?
    2、是否在NEWWINDOW2没有执行完毕之前是获取不到的。
      

  2.   

    首先楼主对COM对象理解有问题。假定当new windows时url已经可以获得了(我认为应该是),那么你通过创建IWebBrowser对象也不可能获得。因为你创建的这个对象又不是人家new windows对象所绑定的那个。理论上,我认为应该可以通过OnNavigate2通知获得,楼主查查MSDN后取试试
      

  3.   

    DISPID_NEWWINDOW2
    感觉比较特殊,
    它居然比DISPID_BEFORENAVIGATE2都前,
    所以比较难获取
    本人和guo_wei一样怀疑可能要运行完才会得到地址,相当于打开一个隐藏的IWebBrowser2,然后去获取,真是麻烦
    不知有没有简单的方法