熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

學習筆記:淺析VB6語言腳本解釋器

2022-06-13   來源: .NET編程 

  討論如何讓自己的應用程序支持腳本
  
  最初也是在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
From:http://tw.wingwit.com/Article/program/net/201311/13012.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.