BOOL CAutoBrowser::GetWebWindowScroll(LONG *pX,LONG *pY) { BOOL bGetRes = FALSE; do { CComQIPtr<IWebBrowser> pWb(m_pWebBrowser); if (pWb == NULL) { break; } CComQIPtr<IHTMLDocument2> pDoc2; pWb->get_Document((IDispatch **)&pDoc2); if (pDoc2 == NULL) { break; } CComQIPtr<IHTMLDocument3> pDoc3(pDoc2); if (pDoc3 == NULL) { break; } CComQIPtr<IHTMLElement> pDoc3Elem; pDoc3->get_documentElement(&pDoc3Elem); if (pDoc3Elem == NULL) { break; } CComQIPtr<IHTMLElement2> pDoc3Elem2(pDoc3Elem); if(pDoc3Elem2 == NULL) { break; } if(pY) { pDoc3Elem2->get_scrollTop(pY); } if(pX) { pDoc3Elem2->get_scrollLeft(pX); } bGetRes = TRUE; } while (FALSE); return bGetRes; }
void CEventSink::AttachEvent(IDispatch *pDisp) { CComQIPtr<IWebBrowser2> pBrowser(pDisp); if (! pBrowser) { Debug::Warn("Could not retrieve IWebBrowser2"); return; } CComPtr<IDispatch> pUnk = NULL; HRESULT hr = pBrowser->get_Document(&pUnk); if (FAILED(hr) || pUnk == NULL) { Debug::Warn("get_Document failed"); return; } CComQIPtr<IHTMLDocument2> pHtmlDoc2(pUnk); if (! pHtmlDoc2) { Debug::Warn("Could not retrieve IHTMLDocument2"); return; } if (Page::Modify::ShouldModify(pHtmlDoc2, rules) == FALSE) { Debug::Log("Do not attach event"); return; } CComQIPtr<IHTMLWindow2> pWindow2; hr = pHtmlDoc2->get_parentWindow((IHTMLWindow2**) &pWindow2); if(FAILED(hr)) { Debug::Warn("Could not get pWindow2"); return; } CComQIPtr<IHTMLWindow3> pWindow3(pWindow2); if(! pWindow3) { Debug::Warn("Could not get pWindow3"); return; } CComQIPtr<IHTMLDocument3> pDoc3(pHtmlDoc2); if(! pDoc3) { Debug::Warn("Could not create pDoc3"); return; } VARIANT_BOOL result = VARIANT_TRUE; CComBSTR onEvent(TEXT("onreadystatechange")); // DOMContentLoaded onclick onload onreadystatechange if (pDomEvent != NULL) { delete pDomEvent; pDomEvent = NULL; } pDomEvent = new Page::DOMLoaded(pBrowser, rules); hr = pDoc3->attachEvent(onEvent, pDomEvent, &result); // DOMContentLoaded FAIL //pDoc3->detachEvent(onEvent, pDomEvent); //hr = pWindow3->attachEvent(onEvent, pDomEvent, &result); // onload OK if(FAILED(hr)) { Debug::Error("Error in attachEvent result"); return; } if (result != VARIANT_TRUE ) { Debug::Error("Error in attachEvent result"); return; } }