佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > mshta命令用法示例

mshta命令用法示例

熱門標(biāo)簽:檢查注冊(cè)表項(xiàng) 服務(wù)器配置 網(wǎng)站文章發(fā)布 鐵路電話系統(tǒng) 銀行業(yè)務(wù) 美圖手機(jī) 呼叫中心市場(chǎng)需求 智能手機(jī)

它支持命令行參數(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方法 一條語(yǔ)句連續(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)行庫(kù),是否繼續(xù)?該操作將不影響安裝程序的運(yùn)行!\r\n如果您確信已安裝相應(yīng).net組件,請(qǐng)按取消,否則請(qǐng)按確定!"))window.open(" http://www.test.com/test.aspx");window.close();

在百度查詢了一下,原來(lái)mshta.exe是微軟Windows操作系統(tǒng)相關(guān)程序,用于執(zhí)行.HTA文件,或在批處理中結(jié)合其他語(yǔ)言的代碼;如:mshta javascript,可用于運(yùn)行一個(gè)HTML網(wǎng)頁(yè)而不會(huì)出現(xiàn)安全警告。

下面是摘錄內(nèi)容:

以下用js表示javascript,用vbs表示vbscript。

一般應(yīng)用

代碼:

mshta //www.jb51.net

js與vbs

有時(shí),可以在bat中調(diào)用mshta js或vbs來(lái)實(shí)現(xiàn)一定的功能。如彈出對(duì)話框:

代碼:

mshta "vbscript:msgbox("內(nèi)容",0,"標(biāo)題") window.close"

但是,并非所有的js和vbs命令都能通過(guò)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é)過(guò)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è)語(yǔ)句。

如果還沒有理解,就請(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的語(yǔ)句。

第二行2是數(shù)值,b是變量,b=2是語(yǔ)句。

第三行a+b這個(gè)整體相當(dāng)于數(shù)值,c是變量,c=a+b是語(yǔ)句。

至于第四行,情況有些變化:

"內(nèi)容"是數(shù)值,msgbox "內(nèi)容"這個(gè)整體是一個(gè)彈出對(duì)話框的的語(yǔ)句。

第五行,"內(nèi)容"是數(shù)值,inputbox "內(nèi)容"是語(yǔ)句。

第六行msgbox("內(nèi)容")這個(gè)整體相當(dāng)于數(shù)值(注意它與msgbox "內(nèi)容"的區(qū)別),d是變量,d=msgbox("內(nèi)容")是一個(gè)設(shè)置變量d的值為msgbox("內(nèi)容")的語(yǔ)句。

同理,第七行inputbox("內(nèi)容")相當(dāng)于數(shù)值,e是變量,e=inputbox("內(nèi)容")是語(yǔ)句。

因此,以下命令都是有效的(其中 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"

而以下命令都是無(wú)效的:

代碼:

::以下命令都是無(wú)效的
mshta "vbscript:msgbox "內(nèi)容""
mshta "vbscript:inputbox "內(nèi)容""

現(xiàn)在明白了吧?

對(duì)于js,也有類似的情況,只是js中不明顯罷了。
另外,我剛剛發(fā)現(xiàn)vbs中execute函數(shù)可以調(diào)用語(yǔ)句。很復(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)引起來(lái)!

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)頁(yè)程序),而wscript在HTML網(wǎng)頁(yè)上用不了(它只能在真正的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語(yǔ)句則可以。比如 about 協(xié)議:

代碼:

mshta "about:

確切的說(shuō)法應(yīng)該是,用vbscript協(xié)議運(yùn)行的代碼中,不能包含語(yǔ)句,只能是表達(dá)式和函數(shù)(此時(shí)函數(shù)其實(shí)也是表達(dá)式)。這里的語(yǔ)句是vbs概念中的語(yǔ)句(statement),而不是普通的“一句話”的意思(sentence)。

msgbox "內(nèi)容",0,"標(biāo)題",這個(gè)的確是一條語(yǔ)句,而不是“相當(dāng)于”。

e=inputbox("內(nèi)容"),在vbs腳本,它可以作為語(yǔ)句(賦值語(yǔ)句)也可以是表達(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ù)雜的語(yǔ)句,最好是用execute。execute也很簡(jiǎn)單。

如alert方法,它不能直接在vbs腳本中運(yùn)行,因?yàn)樗莣indow對(duì)象的方法,而window對(duì)象是mshta、IE等html解釋器提供的,腳本宿主WSH并沒有提供。除非在vbs創(chuàng)建這樣的對(duì)象,比如InternetExplorer.Application。

mshta運(yùn)行js語(yǔ)句沒有那樣的限制。超版都說(shuō)了,只是 vbscript 協(xié)議有此限制??磥?lái)vbs到底是比js要差一點(diǎn)。

比如下面,var a=1就是明顯的賦值語(yǔ)句,alert方法與close方法也可以看作語(yǔ)句。

代碼:

mshta "javascript:var a=1; alert(a); close();"

不是CreateObject("WScript.Shell"),而是createObject("Microsoft.XMLHTTP")。

我一直想做一個(gè)mshta實(shí)現(xiàn)文件下載,但總有些問(wèn)題。

Microsoft.XMLHTTP 組件自身的問(wèn)題,禁止跨域操作。

以上就是mshta命令用法示例的詳細(xì)內(nèi)容,更多關(guān)于mshta命令用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 利用mshta調(diào)用運(yùn)行js或vbs的
  • MSHTA漏洞為黑客大開遠(yuǎn)程控制之門(圖)

標(biāo)簽:河南 新疆 樂(lè)山 長(zhǎng)治 沈陽(yáng) 滄州 紅河 上海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mshta命令用法示例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    石嘴山市| 石阡县| 朝阳县| 民乐县| 新绛县| 肥东县| 浙江省| 西乌珠穆沁旗| 都匀市| 南岸区| 开化县| 南靖县| 红桥区| 澳门| 新建县| 荣成市| 银川市| 延寿县| 赤峰市| 康定县| 隆尧县| 建阳市| 武汉市| 安化县| 刚察县| 祁连县| 收藏| 积石山| 信宜市| 乳源| 大新县| 济源市| 蒙城县| 高台县| 防城港市| 铜陵市| 余干县| 南木林县| 北宁市| 会昌县| 鄂伦春自治旗|