Not able to receiving Mouse events in BHO using HTML document even
Hi,
I am new to ATL progrmming. Based on the material in web, I have been able
to write a BHO and successfully receive Web Browser events like "Document
Complete". But I am not able to receive any HTML Document events. Here's what
I am doing to receive HTML Document events -
1) Get IID_IHTMLDocument2 document object from Browser object
2) Get IHTMLElementCollection object from IID_IHTMLDocument2 document object
3) For each object in IHTMLElementCollection object, query IID_IHTMLElement
object. (I am not able to compile the code if I try to query
"IID_IHTMLElement2")
4) Find connection point to IID_IHTMLElement object.
5) Advise the connection point to browser's document object.
For clarity, here's how I am getting browser's document object
(m_docDispatch) -
STDMETHODIMP BHOClass::Invoke(DISPID dispidMember, REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS* pDispParams,
VARIANT* pvarResult, EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
IHTMLDocument2* pDoc = NULL;
if (!pDispParams)
return E_INVALIDARG;
//::MessageBox(NULL, "received response", "TinyBHO URL", MB_OK);
switch (dispidMember)
{
case DISPID_DOCUMENTCOMPLETE:
{
CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> browser =
pDispParams->rgvarg[1].pdispVal;
if (!browser)
break;
IDispatch* docDispatch = NULL;
HRESULT getDocumentResult = browser->get_Document(&docDispatch);
if ((!SUCCEEDED(getDocumentResult)) || (!docDispatch))
break;
m_docDispatch = docDispatch;
And here's how step 5 is implemented -
void BHOClass::ConnectEvents(IHTMLElement* pElem)
{
HRESULT hr;
IConnectionPointContainer* pCPC = NULL;
IConnectionPoint* pCP = NULL;
DWORD dwCookie;
// Check that this is a connectable object.
hr = pElem->QueryInterface( IID_IConnectionPointContainer, (void**)&pCPC );
if ( SUCCEEDED(hr) )
{
// Find the connection point.
HRESULT hr = pCPC->FindConnectionPoint( DIID_HTMLElementEvents, &pCP );
if ( SUCCEEDED(hr) )
{
// Advise the connection point.
// pUnk is the IUnknown interface pointer for your event sink
hr = pCP->Advise( m_docDispatch, &dwCookie );
if ( SUCCEEDED(hr) )
{
//::MessageBox(NULL,"registering HTLM","TinyBHO",MB_OK);
// Successfully advised
}
pCP->Release();
}
pCPC->Release();
}
}
Please let me know what I am missing here.