Здравствуйте, mager, Вы писали:
M>Здравствуйте, vitaliy666, Вы писали:
V>>Необходимо перехватывать(в целях логирования) следующие события: V>>1.Ввели текст в текстовое поле(input type=text ,textarea,input type=pass). V>>2.Кликнули по html элементу. V>>3.Навели мышь на некоторый html элемент.
V>>Как это можно осуществить,в наличии имеется ссылка на экземпляр IWebBrowser2? V>>У меня пока только 1 идея -добавлять нужный мне обработчик этих событий во все html элементы (это точно можно сделать средствами javascript,думаю,COM интерфейсы тоже должны содержать что нибудь подобное). V>>Есть ли способ лучше?
M>HRESULT hRet = IDispEventSimpleImpl<_nDocID, CSampleClass, &DIID_HTMLDocumentEvents2>:: M> DispEventAdvise(spDocument, &DIID_HTMLDocumentEvents2);
M>где spDocument — IHTMLDocument2* M>также твой класс также должен наследовать интерфейс IDispEventSimpleImpl M>также необходимо в нидере класса описать такую карту сообщений документа
M> BEGIN_SINK_MAP(CSampleClass) M> SINK_ENTRY_INFO(_nDocID, DIID_HTMLDocumentEvents2, DISPID_HTMLDOCUMENTEVENTS2_ONCLICK, OnClick, &DocumentEventInfo) M> SINK_ENTRY_INFO(_nDocID, DIID_HTMLDocumentEvents2, DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT, OnMouseOut, &DocumentEventInfo) M> SINK_ENTRY_INFO(_nDocID, DIID_HTMLDocumentEvents2, DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS, OnKeyPress, &DocumentEventInfo) M> END_SINK_MAP()
Я унаследовал класс от IDispEventSimpleImpl<0, CHelloWorldBHO, &DIID_HTMLDocumentEvents2>,
Объявил карту событий.Проект не компилируется,потому что не найдено объявление DocumentEventInfo.
Где и как нужно данную переменную объявлять?
class ATL_NO_VTABLE CHelloWorldBHO :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CHelloWorldBHO, &CLSID_HelloWorldBHO>,
public IObjectWithSiteImpl<CHelloWorldBHO>,
public IDispatchImpl<IHelloWorldBHO, &IID_IHelloWorldBHO, &LIBID_HelloWorldLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>,
//public IDispEventImpl<0, CHelloWorldBHO, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 1, 1>
public IDispEventSimpleImpl<0, CHelloWorldBHO, &DIID_HTMLDocumentEvents2>
{
BEGIN_SINK_MAP(CHelloWorldBHO)
//SINK_ENTRY_EX(0, DIID_HTMLDocumentEvents2, DISPID_HTMLDOCUMENTEVENTS2_ONCLICK, OnMouseClick)
SINK_ENTRY_INFO(0, DIID_HTMLDocumentEvents2, DISPID_HTMLDOCUMENTEVENTS2_ONCLICK, OnMouseClick, &DocumentEventInfo)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)