日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

监控 WebBrowser 控件内容的改变

發布時間:2025/4/5 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 监控 WebBrowser 控件内容的改变 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天的收獲只有一項,那就是這個啦。。。
呵呵, 主要的就是用到mshtml.IHTMLChangeSink 中的 Notify方法觸發自定義的事件,具體的代碼我也不懂,嘿嘿 這些都是從 東西市 Copy 來的,亂的成粥了。

幾點核心代碼:


public class Monitor : mshtml.IHTMLChangeSink
{
// for monitor htmleditor textchanged
private Guid IMarkupContainer2GUID = typeof(mshtml.IMarkupContainer2).GUID;
   
private uint cookie = 0;

private mshtml.IMarkupContainer2 markupContainer;

  
private WebBrowser webBrowser;

   
// Event
public event Action HtmlEditorEvent;


 
public Monitor(WebBrowser webControl)

   {
      
this.webBrowser= webControl;
}


#region For HtmlEditor TextChanged

// always monitor
private mshtml.IMarkupContainer2 GetMarkupContainer()
{
object oDocument = this.webBrowser.Document.DomDocument;

IntPtr pDocument
= Marshal.GetIUnknownForObject(oDocument);

IntPtr pMarkupContainer
= IntPtr.Zero;

// pMarkupContainer is different after a call to Navigate or designMode

Marshal.QueryInterface(pDocument,
ref IMarkupContainer2GUID, out pMarkupContainer);

//object oMarkupContainer = Marshal.GetObjectForIUnknown(pMarkupContainer); // This does not work

object oMarkupContainer = Marshal.GetUniqueObjectForIUnknown(pMarkupContainer);

Marshal.Release(pDocument);

Marshal.Release(pMarkupContainer);

return (mshtml.IMarkupContainer2)oMarkupContainer;

}


// only one monitor
private mshtml.IMarkupContainer2 GetMarkupContainer2()
{
return (mshtml.IMarkupContainer2)this.webBrowser.Document.DomDocument;
}


public void MonitorTextChangedAlways()
{
this.markupContainer = GetMarkupContainer();

this.markupContainer.RegisterForDirtyRange((mshtml.IHTMLChangeSink)this, out this.cookie);
}


public void StopMonitorTextChanged()
{
if (this.markupContainer != null)
{
this.markupContainer.UnRegisterForDirtyRange(this.cookie);
}
}

#endregion


#region Implement Interface

public void Notify()
{
//觸發改變事件外界去接受
if (this.HtmlEditorEvent != null)
{
this.HtmlEditorEvent();
}
}

#endregion


}

轉載于:https://www.cnblogs.com/08shiyan/archive/2011/02/18/1957995.html

總結

以上是生活随笔為你收集整理的监控 WebBrowser 控件内容的改变的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。