Tôi đang chạy một BHO và tôi đang cố gắng để bắt OnClick sự kiện sử dụng HTMLDocumentEvents2 Tuy nhiên, những sự kiện không bao giờ dường như để đạt được xử lýVấn đề bắt OnClick sự kiện sử dụng HTMLDocumentEvents2 trong một BHO
đây là những gì tôi đang làm:
class ATL_NO_VTABLE CBlastBhoBHO :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBlastBhoBHO, &CLSID_BlastBhoBHO>,
public IObjectWithSiteImpl<CBlastBhoBHO>,
public IDispatchImpl<IBlastBhoBHO, &IID_IBlastBhoBHO, &LIBID_BlastBhoLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispEventImpl<0, CBlastBhoBHO, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 1, 0>,
public IDispEventImpl<1, CBlastBhoBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
BEGIN_SINK_MAP(CBlastBhoBHO)
SINK_ENTRY_EX(0, DIID_HTMLDocumentEvents2, DISPID_HTMLDOCUMENTEVENTS2_ONCLICK, OnClickTrigger)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
END_SINK_MAP()
// Handlers
void STDMETHODCALLTYPE CBlastBhoBHO::OnDocumentComplete(IDispatch *pDisp, VARIANT *url) { // works fine }
void STDMETHODCALLTYPE CBlastBhoBHO::OnClickTrigger(IHTMLEventObj *pEvtObj) { // Never called }
// From SetSite()
ATL::IDispEventSimpleImpl<1,CBlastBhoBHO,&DIID_DWebBrowserEvents2>::DispEventAdvise(m_spWebBrowser);
// From OnDocumentComplete
CComQIPtr<IHTMLDocument3> doc_;
m_spWebBrowser->get_Document((IDispatch**) &doc_);
ATL::IDispEventSimpleImpl<0,CBlastBhoBHO,&DIID_HTMLDocumentEvents2>::DispEventAdvise(doc_);
Tôi đã thử một số biến thể (sử dụng HTMLElementEvents2 vv) hoặc Tư vấn về các đối tượng khác nhau hoặc Tư vấn về tài liệu từ SetSite. xử lý của tôi không bao giờ được gọi.
Mọi trợ giúp sẽ được đánh giá cao. tất cả những gì tôi cần là sự kiện onClick.