本文介紹的是最簡單的辦法,要求不高僅僅執行部分**
如果想使用更加完全的功能需要的是
micrsoft script control
vbscript指令碼運用(指令碼程式與宿主程式的互動)
vbscript指令碼運用
討論如何讓自己的應用程式支援指令碼
最初也是在csdn的blog上找的,但是我再次去找的時候發現已經找不到了.在此對原作者的提示表示感謝
使用範圍,可以讓使用者開發的時候使用指令碼,用exe或者dll進行介面開發雖然功能強大,但是不方便,用指令碼,或者大家熟知的指令碼就方便多了.
方法1 :自己作編譯器 直譯器
方法2 :利用現有的直譯器,用指令碼,省略編譯器
很明顯,第二種方法簡單的多.問題是現有的直譯器(我叫做指令碼引擎)有什麼,去**找,怎麼支援...
python比較流行,可以用於遊戲指令碼引擎,但是我目前還不會用(畢竟,我不是上帝)
vba 就是office的vba,用vb6的語法,我選這個.因為我見了vb就特別親切...
估計凱比用不上這項技術吧....
最關鍵的就是找到這個傳說中的vba6.dll 他來負責解釋
private declare function ebexecuteline lib "vba6.dll" ( _
byval pstringtoexec as long, _
byval unknownn1 as long, _
byval unknownn2 as long, _
byval fcheckonly as long) as long
dll宣告,顧名思義,就是執行一行
第乙個引數,指向命令列字串的指標
剩下的引數不知道作甚麼用的......
用的時候:
封裝一下這樣用起來方便
function stepline(byval cmd as string) as long 'cmd就是vb6**
dim l as long '臨時變數,意義不大
l = ebexecuteline(strptr(byval cmd), 0, 0, 0) '這就是實質,簡單吧
debug.print cstr(l) + ":" + cmd '除錯用的,無意義
end function
你可以直接這麼用
debug.print ebexecuteline(strptr("dim a as long,b as long,c as long"), 0, 0, 0)
debug.print ebexecuteline(strptr("a=" & 3), 0, 0, 0)
debug.print ebexecuteline(strptr("b=" & 5), 0, 0, 0)
debug.print ebexecuteline(strptr("c=" & 2), 0, 0, 0)
debug.print ebexecuteline(strptr("clipboard.settext (a+b)/c"), 0, 0, 0)
debug.print ebexecuteline(strptr("msgbox clipboard.gettext"), 0, 0, 0)
也可以stepline "dim a as long,b as long,c as long"
stepline "a=" & 3
stepline "b=" & 5
stepline "c=" & 2
stepline "clipboard.settext (a+b)/c"
stepline "msgbox clipboard.gettext"
或者將文字放入listbox,甚至可以逐行進行(當然,有興趣你可以自己做偵錯程式)
if list1.listcount = 0 then
msgbox "沒有**"
else
list1.listindex = 0
dim i as long
for i = 0 to list1.listcount - 1
stepline list1.list(i)
next
end if
當然,直接執行文字也是可以的
假定text1.text是全部的**
list1.clear
dim arr() as string
dim i as long
dim s as string
arr = split(text1.text, chr(13) + chr(10))
for i = 0 to ubound(arr())
stepline arr(i)
next
簡單吧而且這些完全是物件導向的
你的程式就相當於虛擬機器,vba6.dll就是直譯器
指令碼可以做什麼!!連api跟***都可以用
如果你的虛擬機器支援(就是程式提供現有的物件),他可以直接用(也稱為api,不過是你提供的,不是windows提供的而已)
給出幾個例項指令碼(以下是過程,自動填充到text1)
private sub ***mand4_click()
text1.text = "'例子 vb6語法"
text1.text = text1.text + chr(13) + chr(10) + "dim a as long,b as long,c as long"
text1.text = text1.text + chr(13) + chr(10) + "a=" & 3
text1.text = text1.text + chr(13) + chr(10) + "b=" & 5
text1.text = text1.text + chr(13) + chr(10) + "c=" & 2
text1.text = text1.text + chr(13) + chr(10) + "clipboard.settext (a+b)/c"
text1.text = text1.text + chr(13) + chr(10) + "msgbox clipboard.gettext"
end sub
private sub ***mand5_click()
text1.text = "'例子 真的是物件導向的,更改新的標題"
text1.text = text1.text + chr(13) + chr(10) + "dim f as form1"
text1.text = text1.text + chr(13) + chr(10) + "set f = new form1"
text1.text = text1.text + chr(13) + chr(10) + "f.show"
text1.text = text1.text + chr(13) + chr(10) + "f.caption=""aaaa"" "
end sub
private sub ***mand6_click()
text1.text = "'例子 執行應用程式,並且傳送按鍵!!"
text1.text = text1.text + chr(13) + chr(10) + "shell ""notepad.exe c:/example.txt"",vbnormalfocus "
text1.text = text1.text + chr(13) + chr(10) + "sendkeys ""hello world!"" "
end sub
易語言擴充套件VB6,讓她更強大。
但現在你有了更好的選擇就是通過第三方程式語言編寫你自己需要的功能庫,然後再呼叫。易語言是乙個非常簡單且接近於vb的語言,從他的變數宣告來看更像是模仿了西門子的plc程式設計工具microwin。下面讓我來用易語言簡單的實現一下吧 1 開啟易語言,建立乙個標準windows dll工程。2 建立乙個函...
vb教材筆記 VB學習筆記 VB語言
print a 2 case else print a does not equal to 1 or 2.end select 五 迴圈語句 迴圈結構是計算機語言裡一種重要的結構,它的應用廣泛,最簡單的例子是累加器的作用,還可以用於窮舉法,更直觀的例子是把某件事重複指定的次數,這樣就不用把要重複的語...
Ch CINT C C 語言指令碼直譯器
1.ch ch是乙個跨平台的c c 指令碼直譯器,它支援iso的c語言標準 c90 c99 和c 類庫,附帶了8000多個函式庫並支援眾多的工業標準,支 持posix,socket winsock,x11 motif,opengl,odbc,c lapack,gtk win32,xml,和cgi等等...