mshtml如何挂钩文件的readystatechange事件

时间:2014-04-13 08:22:25

标签: c# winapi mshtml

我正在使用here所述的方式将IE窗口的句柄转换为mshtml.HTMLDocumentClass

这里发生了一些非常奇怪的事情。

  1. 当我为框架文档挂钩onreadystatechange事件时(使用frame获取document.getElementById并挂钩到框架onreadystatechange),该事件仅被触发一旦。

  2. 当我分离事件处理程序并将其重新连接到同一方法时,问题#1就会消失。

  3. 主要问题,执行此操作后,网络文档冻结,文本框无法获得焦点,按钮可以被点击但它们看起来像只读按钮所有文本类型控件变为readonly,在仔细研究了这个问题之后,我发现只要你挂钩到框架文档的onreadystatechange事件中就会出现这种行为。从事件中分离会使页面恢复正常行为。

  4. 这是我正在使用的代码。

    this.GuideDocument = this.GetHtmlDocumentByWindowHandle(handle) as mshtml.HTMLDocumentClass;
    var frame = (this.GuideDocument.frames.item(0) as mshtml.IHTMLWindow2).frames.item(1) as mshtml.IHTMLWindow2;
    var frameDocument = frame.document as mshtml.HTMLDocumentClass;
    frameDocument.HTMLDocumentEvents2_Event_onreadystatechange += frameDocument_HTMLDocumentEvents2_Event_onreadystatechange;
    
    
    void frameDocument_HTMLDocumentEvents2_Event_onreadystatechange(IHTMLEventObj pEvtObj)
    {
        frameDocument.HTMLDocumentEvents2_Event_onreadystatechange -= frameDocument_HTMLDocumentEvents2_Event_onreadystatechange;
        frameDocument.HTMLDocumentEvents2_Event_onreadystatechange += frameDocument_HTMLDocumentEvents2_Event_onreadystatechange;
        this.DisableButton("btnClose", string.Empty, framedocument);
        }
    

    我不确定这里缺少什么,你觉得这里有什么问题,或者任何其他方法。此网页由许多framesets组成,因此frames。任何对此的见解都将是一个帮助。

    我不知怎的感觉,它需要一些base.onreadystatechange的东西,但我不知道是否有可用的东西。或者其他一些让原始事件被调用的方式等。

    谢谢,

0 个答案:

没有答案