Do Until EOF(1)
Line Input #1, strline
strtmp = IIf(Len(strtmp) = 0, strline, strtmp & vbCrLf & strline)
Loop
Close #1
With ScriptControl1
.Language = "VBScript"
.Reset
.AddCode strtmp
.AddObject "List", List1, True
'.AddObject "Text", Text2, True
.Run "main"
End With
Next

解决方案 »

  1.   

    waittime(20) 是定义好的函数,带参数“20”。
    上面为我的脚本文件。我就是想在脚本中调用函数waittime,但是搞不好
      

  2.   

    这么说吧,脚本有脚本的环境,如果想要做不属于脚本解释器本身功能的事情,需要有一套机制去调节这种需求,ScriptControl可以执行脚本,也有相关的属性或对象取得或设置脚本内容,但是你想把脚本与VB程序结合起来使用,就需要自己定制一套机制去处理,就好像ASP中的Server.URLEncode这个功能,VBS中本身没有这个功能,如果想用ScriptControl做这样的效果,可以在加载解释的脚本前先加载这样的类,如:
    Calss ServerClass
       Public Function URLEncode(strText)
          ...
       End Function
    End Class
    Set Server = New ServerClass
    然后再加载目标脚本数据,如:
    outText = Server.URLEncode("测试内容")以这种方式来扩展脚本,当然,还可进行文本替换或变量值提取等方式去处理脚本,甚至可以自己去解析脚本,这就看你的需求而言了。比如你说的想通过脚本来让VB得到相关参数,这需要VB主动去读取运行脚本后的变量值,如脚本内容为:
    Test1 = 300
    VB 里可以通过对象属性读出脚本变量值,如:
    Msgbox ScriptControl1.CodeObject.Test1当然,还可在脚本中放置更为复杂的过程,VB里还可分析脚本代码然后再提取代码来分析执行,至于怎么做,方法有很多,这就要你自己慢慢做了,我只能给你个方向,具体的还要靠你自己
      

  3.   

    总之不管直接间接,我想要实现的是脚本能触发函数,也行不一定是ScriptControl1。
      

  4.   

    那你可以写个COM组件,在脚本里调用组件,用组件来与你的程序通讯触发过程也可以,比如你的VB程序做个管道服务或网络服务或DDE监听,在组件里发送消息或网络信息或管道信息给VB,简单的可以用DDE通讯。
      

  5.   

    我试了很久ScriptControl1 还是没弄 出来。
    不过我另外找到办法了
    感谢你的耐心回答。谢谢
      

  6.   

    在ScriptControl1中调用DynamicWrapper这个api,这个api原本是VB中回调用的。这样就能实现脚本调用模块函数或外部api功能了。
    下面这段就是我原有的实现方法。
    1——————————————————————————————
        Set sc1 = CreateObject("ScriptControl")
        sc1.Language = "VBScript"
        
        With sc1 'sc1 'ScriptControl1
            
            strCode = "Option Explicit"
            strCode = strCode & vbNewLine & "Sub main(AddressArray)"        strCode = strCode & vbNewLine & "Dim WshShell,UserWrap"
            strCode = strCode & vbNewLine & "Set UserWrap = CreateObject(""DynamicWrapper"")"  'UserWrap.EnumWindows
            strCode = strCode & vbNewLine & "UserWrap.Register ""USER32.DLL"",""EnumWindows"",""I=ll"", ""f=s"", ""R=l"""
            strCode = strCode & vbNewLine & "UserWrap.Register ""kernel32.DLL"", ""Sleep"", ""I=l"", ""f=s"", ""R=l"""
            strCode = strCode & vbNewLine & ""
            
            strTXT = LCase(txt1.Text)
            strTXT = Replace(strTXT, ",", ",")
            strTXT = Replace(strTXT, "“", """")
            strTXT = Replace(strTXT, "”", """")
            strTXT = Replace(strTXT, "sleep", "UserWrap.Sleep")
            strTXT = Replace(strTXT, "print1", "UserWrap.EnumWindows AddressArray(0)")
            strTXT = Replace(strTXT, "print2", "UserWrap.EnumWindows AddressArray(1)")
            
            strCode = strCode & vbNewLine & strTXT
            
            strCode = strCode & vbNewLine & ""
            strCode = strCode & vbNewLine & "set WshShell =Nothing"
            strCode = strCode & vbNewLine & "set UserWrap =Nothing"
            strCode = strCode & vbNewLine & "If Err.Number <> 0 Then"
            strCode = strCode & vbNewLine & "msgbox err.number , err.description , err.source"
            strCode = strCode & vbNewLine & "end if"
            strCode = strCode & vbNewLine & "End Sub"
            
            
            .Reset
            .AddCode strCode
            
            initAddressArray
            
            .Run "main", AddressArray
            
        End With2  txt1中的内容————————————————————
    dim i
    for i=1 to 33
    print1, i
    print2, i 
    sleep 100
    next3 模块中的内容_______________________________________
    Public AddressArray(1) As VariantPublic Sub Print1(ByVal lng As Long, ByVal str As Long)
        
        frmTXT.lbl1.Caption = "显示:" & str
        frmTXT.Refresh
        
    End SubPublic Sub Print2(ByVal lng As Long, ByVal str As Long)
        
        frmTXT.lbl2.Caption = "结果:" & str
        frmTXT.Refresh
        
    End SubPublic Sub initAddressArray()
        
        save AddressOf Print1, 0
        save AddressOf Print2, 1
        
        
    End Sub
    Public Sub save(address, index As Integer)
        
        AddressArray(index) = address
        
    End Sub______________________________________