討論如何讓自己的應用程序支持腳本
最初也是在CSDN的Blog上找的
但是我再次去找的時候發現已經找不到了
在此對原作者的提示表示感謝
使用范圍
可以讓用戶開發的時候使用腳本
用exe或者dll進行接口開發雖然功能強大
但是不方便
用腳本
或者大家熟知的腳本就方便多了
方法
:自己作編譯器 解釋器
方法
:利用現有的解釋器
用腳本
省略編譯器
很明顯
第二種方法簡單的多
問題是現有的解釋器(我叫做腳本引擎)有什麼
去哪裡找
怎麼支持
python比較流行
可以用於游戲腳本引擎
但是我目前還不會用(畢竟
我不是上帝)
VBA 就是office的vba
用vb
的語法
我選這個
因為我見了vb就特別親切
估計凱比用不上這項技術吧
最關鍵的就是找到這個傳說中的vba
dll 他來負責解釋
Private Declare Function EbExecuteLine Lib
vba
dll
( _
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)
)
這就是實質
簡單吧
Debug
Print CStr(l) +
:
+ cmd
調試用的
無意義
End Function
你可以直接這麼用
Debug
Print EbExecuteLine(StrPtr(
dim a as long
b as long
c as long
)
)
Debug
Print EbExecuteLine(StrPtr(
a=
&
)
)
Debug
Print EbExecuteLine(StrPtr(
b=
&
)
)
Debug
Print EbExecuteLine(StrPtr(
c=
&
)
)
Debug
Print EbExecuteLine(StrPtr(
clipboard
settext (a+b)/c
)
)
Debug
Print EbExecuteLine(StrPtr(
msgbox Clipboard
GetText
)
)
也可以
stepline
dim a as long
b as long
c as long
stepline
a=
&
stepline
b=
&
stepline
c=
&
stepline
clipboard
settext (a+b)/c
stepline
msgbox Clipboard
GetText
或者將文本放入listbox
甚至可以逐行進行(當然
有興趣你可以自己做調試器)
If List
ListCount =
Then
MsgBox
沒有代碼
Else
List
ListIndex =
Dim i As Long
For i =
To List
ListCount
stepline List
List(i)
Next
End If
當然
直接執行文本也是可以的
假定text
text是全部的代碼
List
Clear
Dim Arr() As String
Dim i As Long
Dim s As String
Arr = Split(Text
Text
Chr(
) + Chr(
))
For i =
To UBound(Arr())
stepline Arr(i)
Next
簡單吧
而且這些完全是面向對象的
你的程序就相當於虛擬機
vba
dll就是解釋器
腳本可以做什麼!!連API跟COM都可以用
如果你的虛擬機支持(就是程序提供現有的對象)
他可以直接用(也稱為API
不過是你提供的
不是Windows提供的而已)
給出幾個實例腳本(以下是過程
自動填充到text
)
Private Sub Command
_Click()
Text
Text =
例子 VB
語法
Text
Text = Text
Text + Chr(
) + Chr(
) +
dim a as long
b as long
c as long
Text
Text = Text
Text + Chr(
) + Chr(
) +
a=
&
Text
Text = Text
Text + Chr(
) + Chr(
) +
b=
&
Text
Text = Text
Text + Chr(
) + Chr(
) +
c=
&
Text
Text = Text
Text + Chr(
) + Chr(
) +
clipboard
settext (a+b)/c
Text
Text = Text
Text + Chr(
) + Chr(
) +
msgbox Clipboard
GetText
End Sub
Private Sub Command
_Click()
Text
Text =
例子 真的是面向對象的
更改新的標題
Text
Text = Text
Text + Chr(
) + Chr(
) +
dim f as form
Text
Text = Text
Text + Chr(
) + Chr(
) +
set f = new form
Text
Text = Text
Text + Chr(
) + Chr(
) +
f
show
Text
Text = Text
Text + Chr(
) + Chr(
) +
f
caption=
aaaa
End Sub
Private Sub Command
_Click()
Text
Text =
例子 運行應用程序
並且發送按鍵!!
Text
Text = Text
Text + Chr(
) + Chr(
) +
shell
notepad
exe c:\example
txt
vbnormalfocus
Text
Text = Text
Text + Chr(
) + Chr(
) +
sendkeys
Hello World!
End Sub
From:http://tw.wingwit.com/Article/program/net/201311/13012.html