UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT"));
LRESULT lRes;
::SendMessageTimeout(hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (PDWORD_PTR)&lRes);
CComPtr<IHTMLDocument2>  pHTMLDocument2=NULL;
HRESULT hr = ::ObjectFromLresult(lRes, IID_IHTMLDocument2, 0, (void **)&pHTMLDocument2);
//以上代码必须循环调用 浏览器才可以正常响应事件 否则卡死
if (!m_bIsBindEvent)
{
                        CComPtr<IHTMLWindow2> pHTMLWindow2=NULL;
                hr=pHTMLDocument2->get_parentWindow ((IHTMLWindow2**)&pHTMLWindow2); 
CComPtr<IServiceProvider>spServiceProv=NULL;  
hr=pHTMLWindow2->QueryInterface (IID_IServiceProvider,(void**)&spServiceProv);   CComPtr<IWebBrowser2> pWebBrowser2=NULL;
hr = spServiceProv->QueryService(SID_SWebBrowserApp,IID_IWebBrowser2,(void**)&pWebBrowser2);

CComPtr<IConnectionPointContainer> pCPC;

pWebBrowser2->QueryInterface(IID_IConnectionPointContainer,(void**)&pCPC); pCPC->FindConnectionPoint( DIID_DWebBrowserEvents2,&m_pCP);
if(NULL==m_pEventListener)
   m_pEventListener=new IEEvent;
hr=m_pCP->Advise( (IUnknown*)(void*)m_pEventListener,&m_dwCookie);
m_bIsBindEvent=true;
}
求助 给IE绑定DWebBrowserEvents2事件 需要不断调用::ObjectFromLresult浏览器才可以正常运行 否则浏览器卡死 有人知道原因吗

解决方案 »

  1.   

     老师 莫开玩笑  我看别人 只是绑定一次就行了 而我这边需要调用到这里 ::ObjectFromLresult(lRes, IID_IHTMLDocument2, 0, (void **)&pHTMLDocument2);  才可以    是因为是在线程里面做的原因吗
      

  2.   

     IE 绑定上事件以后  可以检测到事件行为  现在我突然把IE关掉了   我正在获取IE元素的代码 会弹出远程调用失败  错误    像这种   该如何 解决啊      如果我用 WaitForSingleObject等待线程技术 再关闭IE的话  IE会卡死几秒钟 再退出  这样也太不友好了 请问 有没有  这方面的处理的经验
      

  3.   

    http://www.codeproject.com搜BHO试试看。