Как я могу прикрепить делегат .NET к событию mshtml?

Я работаю над расширением (BHO) для Internet Explorer, и у меня возникают проблемы с подключением делегата .NET к объектам mshtml для перехвата событий DOM.

Я попытался использовать события, опубликованные интерфейсами IHTMLElementEvents2_Event, ..., и это работает, но только если я укажу правильный тип для элемента DOM, события которого я хочу перехватить. Мне также нужно указать в коде тип элемента, и этот метод не позволяет перехватывать пользовательские события DOM.

Я также попытался использовать класс HtmlEventProxy , который присоединяет объекты IDispatch к элементам DOM с помощью метода IHTMLElement2.attachEvent, но это не работает для меня вообще. Когда я пытаюсь получить доступ к объекту события, как описано в этом потоке , я получаю зависание при доступе к свойству документа элемента DOM.

Итак, как я могу прикрепить обработчики событий к элементам DOM, не прибегая к особому случаю для каждого вида элемента и для каждого типа события?

Спасибо.

10.12.2008 23:11:14
1 ОТВЕТ

Вы можете попробовать этот код:

[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)
    {
      // ...
    }
  }
}
3
4.02.2009 12:19:30