首頁>Club>
10
回覆列表
  • 1 # Sereinfairy

    mshta.exe,HTML Application HOST,HTML應用程式主機,hta檔案直譯器(也能解釋html),就如同IE是html的直譯器,CMD是批處理檔案的直譯器,WScript.exe、CScript.exe是vbs/js指令碼的直譯器。

    mshta的命令列引數似乎並未公開,mshta /? 等方式得不到任何幫助資訊。大家如果感興趣可以去csdn或微軟的msdn查查。

    從網上我僅找到一個帶引數的用法:mshta.exe /register,應該是用來註冊mshta的某項功能(具體作用未知)。

    mshta在一般的應用中都不需要什麼特別的引數,如:

    mshta C:\test.hta

    mshta "%cd%\test.html"

    mshta http://www.google.com.hk

    mshta about:blank

    mshta vbscript:alert("hello")(window.close)

    mshta vbscript:msgbox("是否確定?",36,"確認")(window.close)

    mshta javascript:alert("hello");window.close();

    mshta vbscript:CreateObject("Shell.Application").MinimizeAll()(close)

    注意,最後幾例中的vbscript、javascript不是mshta自身的引數,而是一種協議,它同樣可以直接在IE的位址列中輸入。這種協議使得IE、mshta等程式可以直接執行vbs/js語句而不需要將vbs/js語句放在html檔案中。vbs/js語句當然要遵循vbs/js語法,照樣使用vbs/js的各種物件、方法、屬性、函式等,呼叫指令碼宿主物件模型中的WScript.Shell、WScript.Network等(注意它們並不從屬於vbs,要弄清楚它們的主人),還能呼叫指令碼執行時物件(fso、dictionary等)及其他可以被Automation的COM元件(如Word.Application)。上面的msgbox就是vbs的函式,Shell.Application就是一個Automation類。

    由於hta其實也就是html,所以在hta檔案中同樣可以使用HTML DOM(文件物件模型),如window、document等各種物件。上面的alert、close就是Window物件的方法。也可以呼叫ActiveX控制元件、asp物件,等等。

    還是因為hta就是html,執行hta的mshta.exe是HTML應用程式主機,所以用mshta vbscript: 、mshta javascript: 等形式執行vbs/js語句時,不能呼叫WScript物件,因為WScript物件是指令碼宿主(WSH)自身提供的物件(根物件),只有指令碼主機WScript.exe、CScript.exe才能使用,mshta、IE這些直譯器無法呼叫。很多指令碼初學者人誤以為WScript、WScript.Shell、WScript.Network甚至FSO等物件是vbs的物件,現在清楚事實了吧。所以使用WScript.Sleep方法是理所當然行不通的。但要延時我們可以用Window物件的setTimeout方法,參見:mshta呼叫setTimeout方法實現精確延時

    由於hta被設計用於本地執行,所以許可權比html高。用mshta開啟html也比用IE開啟能獲得更高的許可權。所以本機上的HTML檔案中如果呼叫WScript.Shell等本地物件,用IE開啟會出現安全警告(提示有“活動內容”什麼的),用mshta開啟一般就不會有任何提示和警告了。

  • 中秋節和大豐收的關聯?
  • 小腦共濟性怎麼冶?