使用ATL'处理DWebBrowserEvents2时处理HTMLElementEvents2;s宏 我使用VS2008、C++来创建浏览器助手对象。我的类是从IDispenTempl和其他许多类中派生出来的 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> { . . . BEGIN_SINK_MAP(CHelloWorldBHO) SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete) SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)//Handle BeforeNavigate2 END_SINK_MAP() . . . } class ATL\u NO\u VTABLE CHelloWorldBHO: 公共CComObjectRootEx, 公共课程, 具有SiteImpl的公共对象, 公共场所, 公共IDispenTempl { . . . 开始下沉地图(CHelloWorldBHO) 接收项(1,DIID\U DWebBrowserEvents 2,DISPID\u DOCUMENTCOMPLETE,OnDocumentComplete) SINK_ENTRY_EX(1,DIID_DWebBrowserEvents2,DISPID_BEFORENAVIGATE2,BEFORENAVIGATE2)//句柄BEFORENAVIGATE2 END_SINK_MAP() . . . }

使用ATL'处理DWebBrowserEvents2时处理HTMLElementEvents2;s宏 我使用VS2008、C++来创建浏览器助手对象。我的类是从IDispenTempl和其他许多类中派生出来的 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> { . . . BEGIN_SINK_MAP(CHelloWorldBHO) SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete) SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)//Handle BeforeNavigate2 END_SINK_MAP() . . . } class ATL\u NO\u VTABLE CHelloWorldBHO: 公共CComObjectRootEx, 公共课程, 具有SiteImpl的公共对象, 公共场所, 公共IDispenTempl { . . . 开始下沉地图(CHelloWorldBHO) 接收项(1,DIID\U DWebBrowserEvents 2,DISPID\u DOCUMENTCOMPLETE,OnDocumentComplete) SINK_ENTRY_EX(1,DIID_DWebBrowserEvents2,DISPID_BEFORENAVIGATE2,BEFORENAVIGATE2)//句柄BEFORENAVIGATE2 END_SINK_MAP() . . . },c++,visual-studio-2008,com,atl,bho,C++,Visual Studio 2008,Com,Atl,Bho,从上面的代码可以明显看出,我的DWebBrowserEvents2是使用ATL的宏来处理的。现在我想处理HTMLElementEvents2(为了检测点击、滚动条等),为此,我查询IHTMlement的IHTMLDocument2对象,查询IConnectionPointContainer的QueryInterface(),并调用IConnectionPointContainer::FindConnectionPoint(DIID_HTMLElementEvents2)。(请参阅关于处理HTML

从上面的代码可以明显看出,我的DWebBrowserEvents2是使用ATL的宏来处理的。现在我想处理HTMLElementEvents2(为了检测点击、滚动条等),为此,我查询IHTMlement的IHTMLDocument2对象,查询IConnectionPointContainer的QueryInterface(),并调用IConnectionPointContainer::FindConnectionPoint(DIID_HTMLElementEvents2)。(请参阅关于处理HTMLElementEvents2的说明)。问题是,当我在类中覆盖IDispatch::Invoke时,DWebBrowserEvents2句柄(使用ATL宏创建)失败。有没有一种方法可以在不覆盖Invoke的情况下处理HTMLElementEvents2,或者以只处理HTMLElementEvents2的方式实现Invoke?

谢谢,任何帮助都将不胜感激。

不需要重写调用或获取IConnectionPointContainer。由于这是一个ATL项目,实施另一个IDispenTempl:

public IDispEventImpl<2, CHelloWorldBHO, &DIID_HTMLTextContainerEvents2, &LIBID_MSHTML, 4, 0>
在OnDocumentComplete中,调用IWebBrowser2::get_文档、IHTMLDocument2::get_正文,然后调用DispEventAdvise开始接收事件


请注意,我使用了DIID_HTMLTextContainerEvents2而不是DIID_HTMLElementEvents。这是因为body对象不支持HTMLElementEvents2,就我而言(处理滚动),它工作得很好

实际上不需要重写调用或获取IConnectionPointContainer。由于这是一个ATL项目,实施另一个IDispenTempl:

public IDispEventImpl<2, CHelloWorldBHO, &DIID_HTMLTextContainerEvents2, &LIBID_MSHTML, 4, 0>
在OnDocumentComplete中,调用IWebBrowser2::get_文档、IHTMLDocument2::get_正文,然后调用DispEventAdvise开始接收事件


请注意,我使用了DIID_HTMLTextContainerEvents2而不是DIID_HTMLElementEvents。这是因为body对象不支持HTMLElementEvents2,就我而言(处理滚动),它工作得很好

嗨,哥达米,我也在尝试写一个BHO来处理数据挖掘的目的。但我面临着使用javascript填充内容的问题。假设有这样的
,其中
表是由JS生成的,那么如何获取表内容。dhtml是否有任何活动或其他方式?请建议。。。谢谢,我已经把问题贴在这里了<代码>http://stackoverflow.com/questions/3298160/how-to-get-complete-html-body-using-browser-helper-object-bho-in-case-of-dhtml
Hi GotAmye,我也在尝试编写一个BHO来处理数据挖掘目的。但我面临着使用javascript填充内容的问题。假设有这样的
,其中
表是由JS生成的,那么如何获取表内容。dhtml是否有任何活动或其他方式?请建议。。。谢谢,我已经把问题贴在这里了<代码>http://stackoverflow.com/questions/3298160/how-to-get-complete-html-body-using-browser-helper-object-bho-in-case-of-dhtml