Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将.NET委托附加到mshtml事件?_C#_.net_Javascript_Events_Mshtml - Fatal编程技术网

C# 如何将.NET委托附加到mshtml事件?

C# 如何将.NET委托附加到mshtml事件?,c#,.net,javascript,events,mshtml,C#,.net,Javascript,Events,Mshtml,我正在为Internet Explorer开发扩展(BHO),在将.NET委托附加到mshtml对象以捕获DOM事件时遇到问题 我已经尝试使用IHTMlementEvents2_事件发布的事件。。。接口,这是可行的,但前提是我为要捕获其事件的DOM元素指定了正确的类型。我还需要在代码中指定元素的类型,这种技术不允许捕获自定义DOM事件 我还尝试过使用,它通过IHTMLElement2.attachEvent方法将IDispatch对象附加到DOM元素,但这对我根本不起作用。当我尝试访问中描述的事

我正在为Internet Explorer开发扩展(BHO),在将.NET委托附加到mshtml对象以捕获DOM事件时遇到问题

我已经尝试使用IHTMlementEvents2_事件发布的事件。。。接口,这是可行的,但前提是我为要捕获其事件的DOM元素指定了正确的类型。我还需要在代码中指定元素的类型,这种技术不允许捕获自定义DOM事件

我还尝试过使用,它通过IHTMLElement2.attachEvent方法将IDispatch对象附加到DOM元素,但这对我根本不起作用。当我尝试访问中描述的事件对象时,在访问DOM元素的document属性时会遇到挂起

那么,如何将事件处理程序附加到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)
    {
      // ...
    }
  }
}