纪念一下我的第一个Asia Case

2004年,6月30日。
需求很简单,如何在C# automate WebBrowser Control中HTML元素。当年dudu直接扔给我一个C++的sample. 今天ak47问道同样的问题,直接把当年那个给客户的C#例子扔过去……
 
最后说一下,跟声音好听的人打电话真紧张……
 
Solution:
 
private void button1_Click(object sender, System.EventArgs e)
  {    
   Object oURL;
   Object oEmpty;
   
   oURL = Application.StartupPath+"\\test.htm";
   oEmpty = null;   
   //在Web Browser Control中浏览网页
   axWebBrowser1.Navigate2(ref oURL, ref oEmpty, ref oEmpty, ref oEmpty, ref oEmpty);
  }
  private void button2_Click(object sender, System.EventArgs e)
  {
   //取得Document接口
   mshtml.IHTMLDocument2 idoc=(mshtml.IHTMLDocument2)axWebBrowser1.Document ;
   //取得Document中所有HTML元素的集合
   mshtml.IHTMLElementCollection icoll=(mshtml.IHTMLElementCollection)idoc.all;
   //列举每一个元素,并且挂接消息处理函数
   for(int i=1;i<icoll.length ;i++)
   {
    object obj=icoll.item(i,i);
    try
    {     
     //首先取得该元素的IHTMLElement3接口
     mshtml.IHTMLElement3 iele3=(mshtml.IHTMLElement3)obj;  
     
     //创建对应的消息处理类
     BrowserEventHandler handler = new BrowserEventHandler();
     //保存当前HTML元素到创建出来的类,使得处理消息的时候知道是谁触发的消息
     handler.iele3=iele3;
     handler.Fire = new ElementEventFire(onmouseenter);
     //挂接消息处理类
     iele3.onmouseenter =handler;
    
    }
    catch(System.Exception ex)
    { 
     //因为script不属于IHTMLElement,所以我们需要处理转换过程中出现的异常
     string str=ex.ToString();     
    }   
    
   }
  
  }
  //消息处理函数
  static void onmouseenter(mshtml.IHTMLElement3 iele3)
  {
   //取得HTML元素的IHTMLElement接口,在这个接口上我们可以得到该元素的信息。
   mshtml.IHTMLElement iele1=(mshtml.IHTMLElement)iele3;
   string str=iele1.innerHTML;
   MessageBox.Show (str+"The id is:"+iele1.id );
  }
 } 
 public delegate void ElementEventFire(mshtml.IHTMLElement3 iele3);
 //[System.Runtime.InteropServices.ComVisible(true)]
 public sealed class BrowserEventHandler
 {
  
  private ElementEventFire fire;
  
  public mshtml.IHTMLElement3 iele3;
  public ElementEventFire Fire
  {
   set
   {
    this.fire = value;
   }
  }
  [System.Runtime.InteropServices.DispId(0)] public bool Handler()
  {
   this.fire(iele3);
   return true;
  } 
  
 }
此条目发表在Uncategorized分类目录。将固定链接加入收藏夹。

6 Responses to 纪念一下我的第一个Asia Case

  1. Bonnie说道:

    赶上了grape小朋友的第一次 --b
     
    不过grape小朋友真是好人呢
    被我麻烦了一个多小时..
    自己都觉得不好意思了 >_<

  2. Unknown说道:

    wow gold wow gold replica rolex powerleveling powerleveling powerleveling powerleveling power leveling power leveling powerleveling powerleveling power leveling power leveling power leveling power leveling power leveling power leveling power leveling power leveling rolex wow gold wow gold Warcraft Gold Warcraft Gold wow power leveling wow power leveling wow gold@@@@ World of Warcraft Gold wow power leveling wow power leveling wow power leveling wow power leveling wow power leveling wow power leveling wow power leveling wow power leveling wow power leveling wow powerleveling wow powerleveling wow powerleveling rolex replica wow powerleveling wow powerleveling wow powerleveling wow powerleveling wow powerleveling wow powerleveling wow powerleveling wow powerlevelingmn,klkjg

留下评论