它支持命令行参数,可以接收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.jb51.net
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或https://www.jb51.net/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命令用法示例的详细内容,更多关于mshta命令用法的资料请关注其它相关文章!
mshta,命令用法
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】