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

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

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

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

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

Спасибо.

1 Ответ

3 голосов
/ 04 февраля 2009

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

[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)
    {
      // ...
    }
  }
}
...