以文本方式查看主题

-  搭建论坛  (http://bbs.diylsoft.com:8118/starforum/index.asp)
--  烧友之家  (http://bbs.diylsoft.com:8118/starforum/list.asp?boardid=9)
----  [原创]让搭建之星执行脚本(可调用ActiveX控件)  (http://bbs.diylsoft.com:8118/starforum/dispbbs.asp?boardid=9&id=30385)

--  作者:xilee
--  发布时间:2010-7-25 12:41:20
--  [原创]让搭建之星执行脚本(可调用ActiveX控件)
附件下载地址(需要回复后才可见)
 
以下内容只有回复后才可以浏览


执行脚本的是 RunScript.IPD
RunScript.IPD这个模块的密码是:FuanCM.com,如果你有兴趣了解内部实现,也可以打开看
也没什么密码。

传递的参数格式如下
第一行必须是要调用的脚本中的函数的名称
第二行必须是要传递给调用函数的参数,如果传递的参数为空,可以传一个空格

后面的就是脚本的具体内容
被调用的函数必须是Function,不能是Sub
这个被调用的函数必须能接受且只能接受一个参数。不管这个参数对函数是否有用
函数必须有返回值,返回值可以是任意值,但不能是wxScript,不然RunScript.IPD将不能返回

在示范.ipd里面提供了3个示范

第一个是 让脚本调用 msgbox函数来弹出对话框
第二个是 利用脚本实现下载,这个函数有两个参数,但是接口只能传递1个参数
所以将两个参数放在一起,中间用$#$做分割标记,在函数内部再分开为2个函数
如果你自己设计的函数需要多个参数,也只能这么做,将参数链接再一起,做好
分割标记,然后再脚本函数内部分割为多个参数

第三个是一个求 不大于某个整数的最大质数,比如不大于30的最大质数是:29
这个脚本里面脚本调用了脚本。


如果您要使用RunScript.IPD执行您提供的脚本,请最好先测试您的脚本没问题。
测试的方法同 maxZHU.vbs
没问题了就可以来调用,没经过测试的脚本,执行遇到各种错误你也不知道哪里有问题


----------------------------------特别说明----------------------------------------
本程序使用的版本: 搭建之星 免费版
内部调用了VB设计的程序来实现
允许调用的脚本为VBScript,其他类型的脚本不支持,抱歉。

大家可以利用脚本来调用各种ActiveX控件了

----------------------------------------------------------------------------------

富安传媒:http://www.fuancm.com


--  作者:xilee
--  发布时间:2010-7-25 13:01:23
--  
 考虑到大家对可执行程序的担心,这里贴出VB全部代码
大家如果有VB的基础,可以自行编译

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Private Sub Form_Load()
    Dim Pos, hFmWnd As Long, sScript As String, sFunName As String, sVar As String, sRet As String
    Dim FScript As MSScriptControl.ScriptControl
    If Len(Command) < 5 Then End
    \'第一行为函数名称,第二行为函数参数,其余为内容
    sScript = Command
    Pos = InStr(1, sScript, "{", vbTextCompare)
    If Pos Then
        sScript = Mid$(sScript, Pos + 1, Len(sScript))
    End If
   
    Pos = InStr(1, sScript, "}", vbTextCompare)
    If Pos Then
        sScript = Mid$(sScript, 1, Pos - 1)
    End If
   
    sScript = Replace(sScript, Chr(1), vbCrLf)
    Pos = InStr(1, sScript, vbCrLf)
    sFunName = Mid$(sScript, 1, Pos - 1)
    sScript = Mid$(sScript, Pos + 1, Len(sScript))
    Pos = InStr(1, sScript, vbCrLf)
    sVar = Mid$(sScript, 1, Pos - 1)
    sScript = Mid$(sScript, Pos + 1, Len(sScript))
    If InStr(1, sVar, "Debug", vbTextCompare) Then
        MsgBox "执行函数名称:" & sFunName
        MsgBox "参数:" & sVar
        MsgBox "脚本内容:" & sScript
    End If
    Set FScript = New MSScriptControl.ScriptControl
    FScript.Language = "VBScript"
    FScript.AddCode sScript
    FScript.Timeout = -1
    sRet = FScript.Run(sFunName, sVar)
   
     If InStr(1, sVar, "Debug", vbTextCompare) Then
        MsgBox "返回值" & sRet
    End If
   
    hFmWnd = FindWindow("TMRunForm", "wxScript")

    Call SetWindowText(hFmWnd, sRet)
    End
End Sub




--  作者:ems158
--  发布时间:2010-7-25 13:17:34
--  

很好,有懂 VB的研究一下 。


--  作者:引力波
--  发布时间:2010-7-25 15:20:49
--  

这个VB实例非常值得学习,谢谢楼主!


--  作者:pc_doctor
--  发布时间:2010-7-26 10:13:09
--  

太有才了!

谢谢分享,学习之。


--  作者:xilee
--  发布时间:2010-7-26 11:55:11
--  
 回复引力波,可以调用JavaScript
在VB的代码中,修改者一行
 FScript.Language = "VBScript"
改为
FScript.Language = "JavaScript"
就可以支持了,如果要同时支持两种脚本
就需要传递参数进来,决定具体用那种脚本

--  作者:roy78
--  发布时间:2010-8-29 21:38:15
--  
了解下
--  作者:ahtclhl
--  发布时间:2010-10-11 16:57:26
--  
tttttttttttttttttttttttttttttttt
--  作者:ygd888
--  发布时间:2010-10-12 19:15:35
--  

--  作者:wbl051
--  发布时间:2012-10-11 21:07:44
--  

看一下