1

Internet Explorer の拡張機能 (BHO) に取り組んでいますが、.NET デリゲートを mshtml オブジェクトにアタッチして DOM イベントをキャッチするのに問題があります。

IHTMLElementEvents2_Event、... インターフェイスによって発行されたイベントを使用してみましたが、それは機能しますが、イベントをキャッチしたい DOM 要素に正しいタイプを指定した場合に限ります。また、要素の型をコードで指定する必要がありますが、この手法ではカスタム DOM イベントをキャッチできません。

IHTMLElement2.attachEvent メソッドを介して IDispatch オブジェクトを DOM 要素にアタッチするHtmlEventProxy クラスも使用してみましたが、まったく機能しません。このスレッドで説明されているようにイベント オブジェクトにアクセスしようとすると、DOM 要素のドキュメント プロパティにアクセスするときにハングします。

では、あらゆる種類の要素やあらゆる種類のイベントを特殊なケースにする必要なく、DOM 要素にイベント ハンドラーをアタッチするにはどうすればよいでしょうか?

ありがとう。

4

1 に答える 1

3

このコードを試すことができます:

[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)
    {
      // ...
    }
  }
}
于 2009-02-04T12:19:30.663 に答える