以前做过几个小例子放家里了,明天如果还没有朋友拿到那99分,我再来试试看。我记得有这么几个方面的东西需要了解,也算是线索吧。你试过在VB里面引用接口么?解决了这个问题,剩下的步骤和vc来做没什么区别了。
首先,解决这个问题需要用到一点vb里面不常用的东西。你查一下 Implements 这个 statement ,vb用它可以引入interface,还可以一定程度上模拟“继承”。其次,需要查一下IE编程需要调用哪几个接口(不好意思,我不大记得,MSDN Library上有的东西我都不记——piggybrain)。然后用 implements引入这几个interface,并实现必需的方法。另外可能还需要用到CallByName这个方法,因为你需要在你的vb程序中创建一个 class,然后传递这个class的一个instance给IE的接口作为callback的方法的载体来响应DHTML中的事件,例如:onmousemove。

解决方案 »

  1.   

    我记得好像需要引用 IWebBrowser2 这个接口(shdocvw.dll),如果要处理DHTML中的events,引用 DWebBrowserEvents2 这个接口。对了,我查了一下 MSDN Library,有这么两个标题对你可能有帮助:
    Reusing the WebBrowser Control
    Reusing MSHTML新版本的MSDNLib真麻烦,基本都是.net framework的东西,卸载,重装之...
      

  2.   

    tips:程序中如何监控网页中元素的事件 对编写脚本熟悉的读者都知道页面中可以添加脚本响应元素的事件,例如超链接的OnClick事件,图片的OnMouseMove事件,我们也可以使VB程序响应这些事件。下面是一个VB响应页面中按钮的Click事件的代码: 
    首先建立一个新工程,在Form1中加入一个Webbrowser控件,然后在Form1中加入以下代码: Option Explicit Public Sub Some_Procedure() 
    MsgBox "你点击了按钮." 
    End Sub Private Sub Form_Load() 
    '下载空页面 
    WebBrowser1.Navigate2 "about:blank" 
    End Sub Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) 
    '建立事件响应类 
    Dim cfForward As clsForward '定义在浏览器中显示的HTML代码,其中包含一个按钮btnMyButton 
    Dim sHTML As String 
    sHTML = "<P>This is some text.</P>" 
    sHTML = sHTML & "<P>And here is a button.</P>" 
    sHTML = sHTML & "<BUTTON ID=btnMyButton>" 
    sHTML = sHTML & "Click this button.</BUTTON>" '将HTML代码写入浏览器 
    WebBrowser1.Document.body.innerHTML = sHTML '将事件响应类连接到页面的按钮btnMyButton上 
    Set cfForward = New clsForward 
    cfForward.Set_Destination Me, "Some_Procedure" 
    WebBrowser1.Document.All("btnMyButton").onclick = cfForward 
    End Sub 向工程中添加一个Class Module,Class Module的Name属性设定为clsForward,在clsForward中添加以下代码: Option Explicit Dim oObject As Object 
    Dim sMethod As String 
    Dim bInstantiated As Boolean Private Sub Class_Initialize() 
    bInstantiated = False 
    End Sub Public Sub Set_Destination(oInObject As Object, sInMethod As String) 
    Set oObject = oInObject 
    sMethod = sInMethod 
    bInstantiated = True 
    End Sub Public Sub My_Default_Method() 
    If bInstantiated Then 
    CallByName oObject, sMethod, VbMethod 
    End If 
    End Sub 运行程序,点击Webbrowser中的“Click this button”按钮。程序就会弹出消息框提示“你点击了按钮.”
      

  3.   

    上面的范例是监控一个有name属性的按钮,对于像图片这样的元素,你可以给它一个Name,或者遍历页面元素获得Img元素,下面是一个遍历页面元素的范例:怎么用vb script脚本读出网页中radio选的值?
    代码:
    <HTML>
    <HEAD></HEAD>
    <BODY>
    <script language="VBScript">function IntoIT()
        On error resume next
        Set MyIT = Window.document
        
        for each oEles in MyIT.all
          if typename(oEles)="HTMLFormElement" then
            for each oInput in oEles.all
              Select Case oInput.Type
                case "radio" 
                      if oInput.checked then
                      astr=astr+oInput.Value+"Is selected <br>"
                  else
                    astr=astr+oInput.Value+"Is not selected <br>"
                  end if
                case "text"
                  astr="<p> text is "+astr+oInput.Value+"</p>"            
                case else
              end select
            next
          end if
        next
        
        MyIT.write astr
    end function
    </SCRIPT><form method="POST" action="--WEBBOT-SELF--">
      <p><input type="radio" value="V1" checked name="R1"></p>
      <p><input type="radio" name="R1" value="V2"></p>
      <p><input type="text" name="T1" size="20"></p>
      <p><select size="1" name="D1">
        <option>A1</option>
        <option>A2</option>
        <option>A3</option>
      </select></p>
      <p><input type="submit" value="提交" name="B1"><input type="reset" value="全部重写" name="B2"></p>
      <p><b><a href="VBScript:IntoIT()" ><br>
                  加入收藏夹</a></b></span></p>
    </form>
    </BODY>
    </HTML>
    基本上就是通过遍历访问页面中的元素来实现的
      

  4.   

    tips:程序中如何监控网页中元素的事件 这段代码很眼熟,从MSDN翻译的吧,呵呵'将事件响应类连接到页面的按钮btnMyButton上 
    Set cfForward = New clsForward 
    cfForward.Set_Destination Me, "Some_Procedure" 
    WebBrowser1.Document.All("btnMyButton").onclick = cfForward 核心代码就这两句。
    cfForward.Set_Destination object, Method_of_object (好比传递函数指针,这样的使用方式有点像c#里面的delegate,或者java中传递一个object的instance,并invoke某个method)。完全可以绑定另外的object的method,clsForward内部用 CallByName 来调用比如Form1(传入Me) 这个对象(你自己的其他对象也可以)的 Some_Procedure(Some_Procedure不需要参数,你可以传递其它方法,甚至调用事件处理方法如From1_OnUnload,并传递需要的参数)。
    WebBrowser1.Document.All("btnMyButton").onclick = cfForward 
    绑定DHTML的event object到clsForward的实例。不过WebBrowser不具备InternetExplorer的部分功能。我前面说需要引用几个interface说错了,不好意思。你的要求不用引用接口,那些interface是用来控制InternetExplorer的instance的,比如监控浏览器下载的内容如果是flash,就忽略(现在很多广告flash的循环做得不好,非常消耗cpu资源,而且flash存在恶意攻击的可能)...
      

  5.   

    另外请教  TechnoFantasy(www.applevb.com) 
    我认为 CallByName 就“是” VB 的 Delegate,只是需要像delegate那样通过interface来约束项目中几个模块(比如不同的人写的)之间用这样的方法进行一些高级的refactory工作。不过眼下有个问题不明白,Public Sub My_Default_Method() 
    If bInstantiated Then 
    CallByName oObject, sMethod, VbMethod 
    End If 
    End Sub 将某个方法设置为该类的默认方法,除了在vb的类生成工具中设置,还能怎么做呢?
    比如除了手工修改 cls文件中,在该方法中加入
    Attribute disConnect.VB_UserMemId = 0,有没有办法在写cls的代码的时候将该方法标注为默认方法(属性也是如此)呢?
      

  6.   

    tools ->procedure attributes->advanced
    set procedure id=(default)
      

  7.   

    thanks wjying(葡萄) 
    呵呵,俺对vb还是不熟啊..