您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何正確的使用mshta命令,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
它支持命令行參數,可以接收JS和VBS的方法。看示例(在命令行下測試):
JS:
mshta vbscript:window.execScript("alert('hello world!');","javascript")
VBS:
mshta javascript:window.execScript("msgBox('hello world!'):window.close","vbs")
調用VBS,分別使用MSGBOX函數和POPUP方法:
mshta vbscript:msgbox("該干活了,伙計!",64,"提示")(window.close) mshta vbscript:CreateObject("Wscript.Shell").popup("該干活了,伙計!",7,"提示",64)(window.close)
execute方法 一條語句連續彈二個信息框:
mshta vbscript:execute("msgbox ""one BOX"":msgbox ""two BOX"":window.close")
LZ他們弄的,調用系統的英文閱讀:
mshta vbscript:createobject("sapi.spvoice").speak("Good luck")(window.close)
今天在一個批處理里看到一條命令mshta,感興趣的可以搜索一下“mshta 批處理”
echo off start mshta javascript:if(confirm("將連接網站檢測您是否安裝了.net 2.0運行庫,是否繼續?該操作將不影響安裝程序的運行!\r\n如果您確信已安裝相應.net組件,請按取消,否則請按確定!"))window.open(" http://www.test.com/test.aspx");window.close();
在百度查詢了一下,原來mshta.exe是微軟Windows操作系統相關程序,用于執行.HTA文件,或在批處理中結合其他語言的代碼;如:mshta javascript,可用于運行一個HTML網頁而不會出現安全警告。
下面是摘錄內容:
以下用js表示javascript,用vbs表示vbscript。
一般應用
代碼:
mshta //www.neiyidaogou.com
js與vbs
有時,可以在bat中調用mshta js或vbs來實現一定的功能。如彈出對話框:
代碼:
mshta "vbscript:msgbox("內容",0,"標題") & window.close"
但是,并非所有的js和vbs命令都能通過mshta運行,比如wscript.sleep就不能。
代碼:
rem 以下代碼是錯誤的:
mshta "vbscript:wscript.sleep(1000) & window.close"
可見,mshta調用js或vbs也是有條件的。
基本規則
※mshta所引用的命令必須相當于一個數值或變量。
這句話是什么意思呢?學過vbs的朋友都知道,vbs中彈出對話框的命令是:
代碼:
msgbox "內容",0,"標題"
但是,如果在bat中運行mshta "msgbox "內容",0,"標題"",就會出現錯誤。這是因為msgbox "內容",0,"標題"并不相當于一個數值或變量,而是相當于一個語句。
如果還沒有理解,就請看下面的vbs:
代碼:
a=1 b=2 c=a+b msgbox "內容" inputbox "內容" d=msgbox("內容") e=inputbox("內容")
這段代碼中,第一行1是數值,a是變量,a=1是一個設置變量a的值為1的語句。
第二行2是數值,b是變量,b=2是語句。
第三行a+b這個整體相當于數值,c是變量,c=a+b是語句。
至于第四行,情況有些變化:
"內容"是數值,msgbox "內容"這個整體是一個彈出對話框的的語句。
第五行,"內容"是數值,inputbox "內容"是語句。
第六行msgbox("內容")這個整體相當于數值(注意它與msgbox "內容"的區別),d是變量,d=msgbox("內容")是一個設置變量d的值為msgbox("內容")的語句。
同理,第七行inputbox("內容")相當于數值,e是變量,e=inputbox("內容")是語句。
因此,以下命令都是有效的(其中 & window.close 暫時不去理會):
代碼:
@echo off mshta "vbscript:1 & window.close" mshta "vbscript:a & window.close" mshta "vbscript:a+b & window.close" mshta "vbscript:msgbox("內容") & window.close" mshta "vbscript:inputbox("內容") & window.close"
而以下命令都是無效的:
代碼:
::以下命令都是無效的 mshta "vbscript:msgbox "內容"" mshta "vbscript:inputbox "內容""
現在明白了吧?
對于js,也有類似的情況,只是js中不明顯罷了。
另外,我剛剛發現vbs中execute函數可以調用語句。很復雜,自己研究吧。
連接多個命令
連接多個命令時,每個命令都必須遵守上述的基本規則。
※對于js,用分號 ; 連接多個命令。
代碼:
mshta "javascript:alert('OK!');alert('1234');window.close()"
※對于vbs,用 & 連接多個命令。
代碼:
mshta "vbscript:msgbox("內容") & msgbox("1234") & window.close"
※注意&在bat中有特殊意義,所以此時mshta后面的代碼必須用引號引起來!
window.close的作用
試著運行下面的代碼:
代碼:
mshta "vbscript:msgbox("內容")"
你會發現,不僅彈出了需要的對話框,還出現了一個討厭的白框。window.close的作用就是關閉它。
為什么wscript.sleep不能用
微軟最初設計mshta時是為了運行hta程序(可近似理解為HTML網頁程序),而wscript在HTML網頁上用不了(它只能在真正的js或vbs上用),所以調用mshta js或vbs時要避開它。
利用mshta制作圖形界面
其實,利用mshta也可以在bat中制作windows圖形界面,但在這里就不詳細介紹了。如果有興趣請看
http://baike.baidu.com/view/712376.htm或http://www.neiyidaogou.com/article/40060.htm。
引用解釋:
※mshta所引用的命令必須相當于一個數值或變量。
這個只是針對 vbscript 協議。用其他方式運行vbs語句則可以。比如 about 協議:
代碼:
mshta "about:
確切的說法應該是,用vbscript協議運行的代碼中,不能包含語句,只能是表達式和函數(此時函數其實也是表達式)。這里的語句是vbs概念中的語句(statement),而不是普通的“一句話”的意思(sentence)。
msgbox "內容",0,"標題",這個的確是一條語句,而不是“相當于”。
e=inputbox("內容"),在vbs腳本,它可以作為語句(賦值語句)也可以是表達式(比較變量e與函數inputbox("內容")的返回值)。
如果用vbscript協議運行,則它只是比較表達式。
vbscript協議運行代碼可以用&連接不同的表達式,這個發現不錯。其實就是表達式連接符。
但如果要運行更復雜的語句,最好是用execute。execute也很簡單。
如alert方法,它不能直接在vbs腳本中運行,因為它是window對象的方法,而window對象是mshta、IE等html解釋器提供的,腳本宿主WSH并沒有提供。除非在vbs創建這樣的對象,比如InternetExplorer.Application。
mshta運行js語句沒有那樣的限制。超版都說了,只是 vbscript 協議有此限制。看來vbs到底是比js要差一點。
比如下面,var a=1就是明顯的賦值語句,alert方法與close方法也可以看作語句。
代碼:
mshta "javascript:var a=1; alert(a); close();"
不是CreateObject("WScript.Shell"),而是createObject("Microsoft.XMLHTTP")。
我一直想做一個mshta實現文件下載,但總有些問題。
Microsoft.XMLHTTP 組件自身的問題,禁止跨域操作。
關于如何正確的使用mshta命令就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。