Ich erstelle ein Browser Helper-Objekt mit VS2008, C++. Meine Klasse hat sich unter vielen anderen von IDispEventImpl abgeleitetBehandle HTMLElementEvents2, wenn DWebBrowserEvents2 mit ATLs Makros behandelt wurde
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()
.
.
.
}
Wie aus dem obigen Code, meine DWebBrowserEvents2 behandelt werden die Makros ATL verwenden. Jetzt möchte ich HTMLElementEvents2 behandeln (um Klicks, Bildlaufleisten usw. zu erkennen). Dazu benutze ich QueryInterface() das IHTMLDocument2-Objekt für IHTMLElement, QueryInterface() das für IConnectionPointContainer und rufe IConnectionPointContainer :: FindConnectionPoint (DIID_HTMLElementEvents2) auf. (Siehe msdn's article zum Umgang mit HTMLElementEvents2). Das Problem ist, wenn ich IDispatch :: Invoke in meiner Klasse überschreiben, die DWebBrowserEvents2 behandelt (erstellt mit ATL-Makros) fehlschlagen. Gibt es eine Möglichkeit, mit HTMLElementEvents2 umzugehen, ohne Invoke zu überschreiben, oder den Aufruf so zu implementieren, dass nur HTMLElementEvents2 gehandhabt wird?
Danke, Jede Hilfe wird geschätzt.
Hallo GotAmye, ich versuche auch, ein BHO zu schreiben, um Data Mining-Zwecke zu behandeln. Aber ich habe ein Problem, wo Inhalte mit Javascript gefüllt werden. Lassen Sie uns sagen, wenn Sie so etwas wie '