它支持命令行參數(shù),可以接收J(rèn)S和VBS的方法。看示例(在命令行下測(cè)試):
JS:
mshta vbscript:window.execScript("alert('hello world!');","javascript")
VBS:
mshta javascript:window.execScript("msgBox('hello world!'):window.close","vbs")
調(diào)用VBS,分別使用MSGBOX函數(shù)和POPUP方法:
mshta vbscript:msgbox("該干活了,伙計(jì)!",64,"提示")(window.close)
mshta vbscript:CreateObject("Wscript.Shell").popup("該干活了,伙計(jì)!",7,"提示",64)(window.close)
execute方法 一條語句連續(xù)彈二個(gè)信息框:
mshta vbscript:execute("msgbox ""one BOX"":msgbox ""two BOX"":window.close")
LZ他們弄的,調(diào)用系統(tǒng)的英文閱讀:
mshta vbscript:createobject("sapi.spvoice").speak("Good luck")(window.close)
下面是其他網(wǎng)友的補(bǔ)充
今天在一個(gè)批處理里看到一條命令mshta,感興趣的可以搜索一下“mshta 批處理”
echo off
start mshta javascript:if(confirm("將連接網(wǎng)站檢測(cè)您是否安裝了.net 2.0運(yùn)行庫,是否繼續(xù)?該操作將不影響安裝程序的運(yùn)行!\r\n如果您確信已安裝相應(yīng).net組件,請(qǐng)按取消,否則請(qǐng)按確定!"))window.open(" http://www.test.com/test.aspx");window.close();
在百度查詢了一下,原來mshta.exe是微軟Windows操作系統(tǒng)相關(guān)程序,用于執(zhí)行.HTA文件,或在批處理中結(jié)合其他語言的代碼;如:mshta javascript,可用于運(yùn)行一個(gè)HTML網(wǎng)頁而不會(huì)出現(xiàn)安全警告。
下面是摘錄內(nèi)容:
以下用js表示javascript,用vbs表示vbscript。
一般應(yīng)用
代碼:
mshta //www.jb51.net
js與vbs
有時(shí),可以在bat中調(diào)用mshta js或vbs來實(shí)現(xiàn)一定的功能。如彈出對(duì)話框:
代碼:
mshta "vbscript:msgbox("內(nèi)容",0,"標(biāo)題") window.close"
但是,并非所有的js和vbs命令都能通過mshta運(yùn)行,比如wscript.sleep就不能。
代碼:
rem 以下代碼是錯(cuò)誤的:
mshta "vbscript:wscript.sleep(1000) window.close"
可見,mshta調(diào)用js或vbs也是有條件的。
基本規(guī)則
※mshta所引用的命令必須相當(dāng)于一個(gè)數(shù)值或變量。
這句話是什么意思呢?學(xué)過vbs的朋友都知道,vbs中彈出對(duì)話框的命令是:
代碼:
msgbox "內(nèi)容",0,"標(biāo)題"
但是,如果在bat中運(yùn)行mshta "msgbox "內(nèi)容",0,"標(biāo)題"",就會(huì)出現(xiàn)錯(cuò)誤。這是因?yàn)閙sgbox "內(nèi)容",0,"標(biāo)題"并不相當(dāng)于一個(gè)數(shù)值或變量,而是相當(dāng)于一個(gè)語句。
如果還沒有理解,就請(qǐng)看下面的vbs:
代碼:
a=1
b=2
c=a+b
msgbox "內(nèi)容"
inputbox "內(nèi)容"
d=msgbox("內(nèi)容")
e=inputbox("內(nèi)容")
這段代碼中,第一行1是數(shù)值,a是變量,a=1是一個(gè)設(shè)置變量a的值為1的語句。
第二行2是數(shù)值,b是變量,b=2是語句。
第三行a+b這個(gè)整體相當(dāng)于數(shù)值,c是變量,c=a+b是語句。
至于第四行,情況有些變化:
"內(nèi)容"是數(shù)值,msgbox "內(nèi)容"這個(gè)整體是一個(gè)彈出對(duì)話框的的語句。
第五行,"內(nèi)容"是數(shù)值,inputbox "內(nèi)容"是語句。
第六行msgbox("內(nèi)容")這個(gè)整體相當(dāng)于數(shù)值(注意它與msgbox "內(nèi)容"的區(qū)別),d是變量,d=msgbox("內(nèi)容")是一個(gè)設(shè)置變量d的值為msgbox("內(nèi)容")的語句。
同理,第七行inputbox("內(nèi)容")相當(dāng)于數(shù)值,e是變量,e=inputbox("內(nèi)容")是語句。
因此,以下命令都是有效的(其中 window.close 暫時(shí)不去理會(huì)):
代碼:
@echo off
mshta "vbscript:1 window.close"
mshta "vbscript:a window.close"
mshta "vbscript:a+b window.close"
mshta "vbscript:msgbox("內(nèi)容") window.close"
mshta "vbscript:inputbox("內(nèi)容") window.close"
而以下命令都是無效的:
代碼:
::以下命令都是無效的
mshta "vbscript:msgbox "內(nèi)容""
mshta "vbscript:inputbox "內(nèi)容""
現(xiàn)在明白了吧?
對(duì)于js,也有類似的情況,只是js中不明顯罷了。
另外,我剛剛發(fā)現(xiàn)vbs中execute函數(shù)可以調(diào)用語句。很復(fù)雜,自己研究吧。
連接多個(gè)命令
連接多個(gè)命令時(shí),每個(gè)命令都必須遵守上述的基本規(guī)則。
※對(duì)于js,用分號(hào) ; 連接多個(gè)命令。
代碼:
mshta "javascript:alert('OK!');alert('1234');window.close()"
※對(duì)于vbs,用 連接多個(gè)命令。
代碼:
mshta "vbscript:msgbox("內(nèi)容") msgbox("1234") window.close"
※注意在bat中有特殊意義,所以此時(shí)mshta后面的代碼必須用引號(hào)引起來!
window.close的作用
試著運(yùn)行下面的代碼:
代碼:
mshta "vbscript:msgbox("內(nèi)容")"
你會(huì)發(fā)現(xiàn),不僅彈出了需要的對(duì)話框,還出現(xiàn)了一個(gè)討厭的白框。window.close的作用就是關(guān)閉它。
為什么wscript.sleep不能用
微軟最初設(shè)計(jì)mshta時(shí)是為了運(yùn)行hta程序(可近似理解為HTML網(wǎng)頁程序),而wscript在HTML網(wǎng)頁上用不了(它只能在真正的js或vbs上用),所以調(diào)用mshta js或vbs時(shí)要避開它。
利用mshta制作圖形界面
其實(shí),利用mshta也可以在bat中制作windows圖形界面,但在這里就不詳細(xì)介紹了。如果有興趣請(qǐng)看
http://baike.baidu.com/view/712376.htm或https://www.jb51.net/article/40060.htm。
引用解釋:
※mshta所引用的命令必須相當(dāng)于一個(gè)數(shù)值或變量。
這個(gè)只是針對(duì) vbscript 協(xié)議。用其他方式運(yùn)行vbs語句則可以。比如 about 協(xié)議:
代碼:
mshta "about:
確切的說法應(yīng)該是,用vbscript協(xié)議運(yùn)行的代碼中,不能包含語句,只能是表達(dá)式和函數(shù)(此時(shí)函數(shù)其實(shí)也是表達(dá)式)。這里的語句是vbs概念中的語句(statement),而不是普通的“一句話”的意思(sentence)。
msgbox "內(nèi)容",0,"標(biāo)題",這個(gè)的確是一條語句,而不是“相當(dāng)于”。
e=inputbox("內(nèi)容"),在vbs腳本,它可以作為語句(賦值語句)也可以是表達(dá)式(比較變量e與函數(shù)inputbox("內(nèi)容")的返回值)。
如果用vbscript協(xié)議運(yùn)行,則它只是比較表達(dá)式。
vbscript協(xié)議運(yùn)行代碼可以用連接不同的表達(dá)式,這個(gè)發(fā)現(xiàn)不錯(cuò)。其實(shí)就是表達(dá)式連接符。
但如果要運(yùn)行更復(fù)雜的語句,最好是用execute。execute也很簡單。
如alert方法,它不能直接在vbs腳本中運(yùn)行,因?yàn)樗莣indow對(duì)象的方法,而window對(duì)象是mshta、IE等html解釋器提供的,腳本宿主WSH并沒有提供。除非在vbs創(chuàng)建這樣的對(duì)象,比如InternetExplorer.Application。
mshta運(yùn)行js語句沒有那樣的限制。超版都說了,只是 vbscript 協(xié)議有此限制??磥韛bs到底是比js要差一點(diǎn)。
比如下面,var a=1就是明顯的賦值語句,alert方法與close方法也可以看作語句。
代碼:
mshta "javascript:var a=1; alert(a); close();"
不是CreateObject("WScript.Shell"),而是createObject("Microsoft.XMLHTTP")。
我一直想做一個(gè)mshta實(shí)現(xiàn)文件下載,但總有些問題。
Microsoft.XMLHTTP 組件自身的問題,禁止跨域操作。
以上就是mshta命令用法示例的詳細(xì)內(nèi)容,更多關(guān)于mshta命令用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:- 利用mshta調(diào)用運(yùn)行js或vbs的
- MSHTA漏洞為黑客大開遠(yuǎn)程控制之門(圖)