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を実装する方法はありますか?
ありがとうございました。ご協力いただければ幸いです。
こんにちはGotAmye、私はまた、データマイニングの目的を処理するためにBHOを書いてみようとしています。しかし、私はコンテンツがjavascriptを使用して設定されている問題に直面しています。この '