2 Stimmen

Zuweisung des Onmouseover-Ereignisses an mein Html-Dokument funktioniert nicht

Ich arbeite an einem Projekt, in dem ich ein c#-Programm schreibe. Windows-Anwendung die das aktuelle Element unter dem Cursor aus einer laufenden Instanz von Internet Explorer abrufen möchte.

Ich kann das Handle von IHtmlDocument2 der laufenden Instanz von IE erhalten und ich möchte es das onmouseover-Ereignis wie folgt zuweisen:

 DHTMLEventHandler myHandler = new DHTMLEventHandler(htmlDocument);
 myHandler.Handler += new DHTMLEvent(this.BrowserEventHandler);
 htmlDocument.onmouseover = myHandler;

Und weil ich nicht wollte, dass der IE andere Ereignisse frisst (eine bekannte, aber gelöste Frage), sollte ich eine DHTMLEventHandler-Klasse wie diese erstellen:

public delegate void DHTMLEvent(IHTMLEventObj obj);

[ComVisible(true)]
public class DHTMLEventHandler
{
    public DHTMLEvent Handler;

    private IHTMLDocument2 Document;

    public DHTMLEventHandler(IHTMLDocument2 doc)
    {
        Document = doc;
    }

    [DispId(0)]
    public void Call()
    {
        Handler(Document.parentWindow.@event);
    }
}

Und meine BrowserEventHandler-Methode ist wie folgt:

public void BrowserEventHandler(IHTMLEventObj e)
    {
    }

Immer noch leer (aber ich möchte das Element der innerHtml unter Cursor), aber diese Methode ist immer noch leer und ich erhalte :

Eine zufällige Ausnahme vom Typ 'System.InvalidCastException' ist in FindText.exe aufgetreten

Immer wenn ich die Maus bewege.

Fragen:

  1. Warum bekomme ich diese Ausnahme?
  2. Ist es möglich, e.srcElement.innerhtml in einer Variablen zu erhalten und in meiner c#-Anwendung zu verwenden?

Lassen Sie mich wissen, wenn etwas unklar und zweideutig ist. Vielen Dank im Voraus für jede Hilfe und Idee. I sehr Ich bin für jeden Kommentar und jede Hilfe dankbar.

Aktualisierung:

Um meine zweite Frage zu beantworten: Es scheint möglich zu sein, die e.srcElement.innerHTML der IHTMLEventObj e aber ich weiß wirklich nicht, warum die BrowserEventHandler Methode wird nie aufgerufen. Irgendwelche Ideen oder Hinweise?

update2:

Ok, ich habe das Problem gefunden. Zunächst habe ich einige Einstellungen meines Projekts geändert, um die Zeile zu erhalten, in der die Ausnahme zuerst auftritt (da es sich um eine Ausnahme der ersten Chance handelt), wie folgt:

In Visual Studio: Menü >> Debug >> Ausnahmen >> CLR-Ausnahmen >> System und überprüfen Sie die Option werfen von SystemInvalidCastException.

Ich habe festgestellt, dass das Problem mit dieser Zeile von DHTMLEventHandler Klasse:

Handler(Document.parentWindow.@event); 

Es wirft Invalid Cast Exception was meiner Meinung nach mit der Thread s nach meinen letzten Recherchen.

Ich denke, ich sollte ApartmentState auf ApartmentState.STA . Aber ich weiß nicht, wie. Irgendwelche Ideen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X