2009-07-09 4 views
1

VS2008、C++を使用してブラウザヘルパーオブジェクトを作成しています。私のクラスは、他の多くの上で、私のDWebBrowserEvents2は、ATLのマクロを使用して処理されたコードから明らかなようにDWebBrowserEvents2がATLのマクロを使用して処理されたときのHTMLElementEvents2の処理

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() 
. 
. 
. 
} 

の間ではIDispEventImplから派生してきました。今度は、HTMLElementEvents2(クリック、スクロールバーなどを検出するため)を処理します。I QueryInterface()IHTMLElementのIHTMLDocument2オブジェクト、IConnectionPointContainerのQueryInterface()、IConnectionPointContainer :: FindConnectionPoint(DIID_HTMLElementEvents2)を呼び出します。 (HTMLElementEvents2の処理については、msdn's articleを参照してください)。私のクラスでIDispatch :: Invokeを上書きすると、(ATLマクロを使用して作成された)DWebBrowserEvents2ハンドルが失敗するという問題があります。 Invokeを上書きせずにHTMLElementEvents2を処理する方法、またはHTMLElementEvents2のみを処理するような方法でInvokeを実装する方法はありますか?
ありがとうございました。ご協力いただければ幸いです。

答えて

1

Invokeを無効にするか、IConnectionPointContainerを取得する必要はありません。これはATLプロジェクトなので、別のIDispEventImplを実装しています。

public IDispEventImpl<2, CHelloWorldBHO, &DIID_HTMLTextContainerEvents2, &LIBID_MSHTML, 4, 0> 

トリックを行います。その後、としてエントリシンク:OnDocumentCompleteで

SINK_ENTRY_EX(2, DIID_HTMLTextContainerEvents2, DISPID_ONSCROLL, OnScroll) 

を、のIWebBrowser2 :: get_Document、IHTMLDocument2 :: get_bodyを呼び出し、その後、イベントの受信を開始するDispEventAdviseを呼び出します。

DIID_HTMLElementEventsではなくDIID_HTMLTextContainerEvents2を使用しています。これは、bodyオブジェクトがHTMLElementEvents2をサポートしていないためです。私の目的(スクロールを処理するため)はうまくいきます!

+0

こんにちはGotAmye、私はまた、データマイニングの目的を処理するためにBHOを書いてみようとしています。しかし、私はコンテンツがjavascriptを使用して設定されている問題に直面しています。この '

'のようなものがあるとしましょう。ここで 'table'はJSによって生成され、次にテーブルの内容を取得する方法です。 dhtmlなどのイベントはありますか?提案してください...ありがとう p.s.私はここに質問を掲載しています.. 'http://stackoverflow.com/questions/3298160/how-to-get-complete-html-body-using-browser-helper-object-bho-in-case-of-dhtml ' – Favonius

関連する問題