讨论如何让自己的应用程序支持脚本 最初也是在CSDN的Blog上找的但是我再次去找的时候发现已经找不到了在此对原作者的提示表示感谢 使用范围可以让用户开发的时候使用脚本用exe或者dll进行接口开发虽然功能强大但是不方便用脚本或者大家熟知的脚本就方便多了 方法 :自己作编译器 解释器 方法 :利用现有的解释器用脚本省略编译器 很明显第二种方法简单的多问题是现有的解释器(我叫做脚本引擎)有什么去哪里找怎么支持 python比较流行可以用于游戏脚本引擎但是我目前还不会用(毕竟我不是上帝) VBA 就是office的vba用vb的语法我选这个因为我见了vb就特别亲切 估计凯比用不上这项技术吧 最关键的就是找到这个传说中的vbadll他来负责解释 Private Declare Function EbExecuteLine Lib vbadll ( _ ByVal pStringToExec As Long _ ByVal Unknownn As Long _ ByVal Unknownn As Long _ ByVal fCheckOnly As Long) As Long dll声明顾名思义就是执行一行 第一个参数指向命令行字符串的指针 剩下的参数不知道作甚么用的 用的时候: 封装一下这样用起来方便 Function stepline(ByVal cmd As String) As Long cmd就是vb代码 Dim l As Long 临时变量意义不大 l = EbExecuteLine(StrPtr(ByVal cmd) ) 这就是实质简单吧 DebugPrint CStr(l) + : + cmd 调试用的无意义 End Function 你可以直接这么用 DebugPrint EbExecuteLine(StrPtr(dim a as longb as longc as long) ) DebugPrint EbExecuteLine(StrPtr(a= & ) ) DebugPrint EbExecuteLine(StrPtr(b= & ) ) DebugPrint EbExecuteLine(StrPtr(c= & ) ) DebugPrint EbExecuteLine(StrPtr(clipboardsettext (a+b)/c) ) DebugPrint EbExecuteLine(StrPtr(msgbox ClipboardGetText) ) 也可以 stepline dim a as longb as longc as long stepline a= & stepline b= & stepline c= & stepline clipboardsettext (a+b)/c stepline msgbox ClipboardGetText 或者将文本放入listbox甚至可以逐行进行(当然有兴趣你可以自己做调试器) If ListListCount = Then MsgBox 没有代码 Else ListListIndex = Dim i As Long For i = To ListListCount stepline ListList(i) Next End If 当然直接执行文本也是可以的 假定texttext是全部的代码 ListClear Dim Arr() As String Dim i As Long Dim s As String Arr = Split(TextText Chr() + Chr()) For i = To UBound(Arr()) stepline Arr(i) Next 简单吧 而且这些完全是面向对象的 你的程序就相当于虚拟机vbadll就是解释器 脚本可以做什么!!连API跟COM都可以用 如果你的虚拟机支持(就是程序提供现有的对象)他可以直接用(也称为API不过是你提供的不是Windows提供的而已) 给出几个实例脚本(以下是过程自动填充到text) Private Sub Command_Click() TextText = 例子 VB语法 TextText = TextText + Chr() + Chr() + dim a as longb as longc as long TextText = TextText + Chr() + Chr() + a= & TextText = TextText + Chr() + Chr() + b= & TextText = TextText + Chr() + Chr() + c= & TextText = TextText + Chr() + Chr() + clipboardsettext (a+b)/c TextText = TextText + Chr() + Chr() + msgbox ClipboardGetText End Sub Private Sub Command_Click() TextText = 例子 真的是面向对象的更改新的标题 TextText = TextText + Chr() + Chr() + dim f as form TextText = TextText + Chr() + Chr() + set f = new form TextText = TextText + Chr() + Chr() + fshow TextText = TextText + Chr() + Chr() + fcaption=aaaa End Sub Private Sub Command_Click() TextText = 例子 运行应用程序并且发送按键!! TextText = TextText + Chr() + Chr() + shell notepadexe c:\exampletxtvbnormalfocus TextText = TextText + Chr() + Chr() + sendkeys Hello World! End Sub |