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

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

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

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

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

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 593
1

Ответы 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)
    {
      // ...
    }
  }
}

Другие вопросы по теме