Я работаю над расширением (BHO) для Internet Explorer, и у меня возникли проблемы с подключением делегата .NET к объектам mshtml для перехвата событий DOM.
Я пробовал использовать события, опубликованные интерфейсами IHTMLElementEvents2_Event, ..., и это работает, но только если я укажу правильный тип для элемента DOM, события которого я хочу перехватить. Мне также нужно указать в коде тип элемента, и этот метод не позволяет перехватывать пользовательские события DOM.
Я также пробовал использовать HtmlEventProxy класс, который прикрепляет объекты IDispatch к элементам DOM с помощью метода IHTMLElement2.attachEvent, но у меня это совсем не работает. Когда я пытаюсь получить доступ к объекту события, как описано в эта ветка, я получаю зависание при доступе к свойству документа элемента DOM.
Итак, как я могу прикрепить обработчики событий к элементам DOM, не прибегая к особому случаю для каждого элемента и каждого вида событий?
Спасибо.





Вы можете попробовать этот код:
[ComVisible(true)]
public class Foo
{
public Foo(HtmlDocument doc)
{
IHTMLDocument2 doc2 = (IHTMLDocument2)doc.DomDocument;
doc2.onkeydown = this;
}
[System.Runtime.InteropServices.DispId(0)]
public void EventHandler()
{
IHTMLWindow2 win2 = (IHTMLWindow2)_doc.Window.DomWindow;
IHTMLEventObj e = win2.@event;
if (e.keyCode == (int)Keys.F5)
{
// ...
}
}
}