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:
- Warum bekomme ich diese Ausnahme?
- 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?