Я работаю над проектом, в котором пишу приложение ac # для windows , которое хочет получить текущий элемент под курсором из запущенного экземпляра Internet Explorer.
Я могу получить дескриптор IHtmlDocument2 работающего экземпляра IE, и я хочу назначить ему событие onmouseover следующим образом:
DHTMLEventHandler myHandler = new DHTMLEventHandler(htmlDocument);
myHandler.Handler += new DHTMLEvent(this.BrowserEventHandler);
htmlDocument.onmouseover = myHandler;
И потому что я не хотел, чтобы IE ел другие события (известныйно решенный вопрос) я должен создать класс DHTMLEventHandler следующим образом:
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);
}
}
И мой метод BrowserEventHandler выглядит так:
public void BrowserEventHandler(IHTMLEventObj e)
{
}
Все еще пуст (но я хочу получить элементinnerHtml
под курсором), но этот метод все еще пуст, и я получаю:
Первое случайное исключение типа 'System.InvalidCastException' произошло в FindText.exe
Всякий раз, когда я перемещаю мышь.
Вопросы:
- Почему я получаю это исключение?
- Возможно ли получить электронное письмо?.srcElement.innerhtml в переменной и использовать в мy c # application?
Дайте мне знать, если что-то неясно и неоднозначно.Заранее спасибо за любую помощь и идеи.Я очень благодарен за любые комментарии и помощь.
Обновление:
Чтобы ответить на мой второй вопрос, кажется возможным получить e.srcElement.innerHTML
изIHTMLEventObj e
, но я действительно не знаю, почему метод BrowserEventHandler
никогда не вызывается.Любые идеи или советы?
update2:
Хорошо, я нашел проблему.Сначала я изменил некоторые настройки своего проекта, чтобы получить строку, в которой сначала возникает исключение (поскольку это исключение с первого шанса), например:
В visual studio: Меню >> Отладка >> Исключения >> Исключения CLR>> system и проверьте опцию throw для SystemInvalidCastException.
Я обнаружил, что проблема в этой строке DHTMLEventHandler
class:
Handler(Document.parentWindow.@event);
Он выбрасывает Invalid Cast Exception
, который, я думаю, связан сThread
s согласно моим недавним поискам.
Полагаю, мне следует установить ApartmentState на ApartmentState.STA
.Но я не знаю как.есть идеи?