mshta "vbscript:createobject("wscript.shell").sendkeys("^{f12}") & window.close"
这个能在批处理中运行,mshta可以将绝大多数vbs命令用在批处理中
下面是一个教程你可以研究一下:
————————————————————————————————
mshta的用法:
1.打开网页,如:mshta http://www.baidu.com/
2.有时,可以在bat中调用mshta js或vbs来实现一定的功能。如弹出对话框:
mshta "vbscript:msgbox("内容",0,"标题") & window.close"
3.但是,并非所有的js和vbs命令都能通过mshta运行,比如wscript.sleep就不能。
mshta "vbscript:wscript.sleep(1000) & window.close" 这段代码是错的
4.可见,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所引用的命令必须相当于一个数值或变量。
这个只是针对 vbscript 协议。用其他方式运行vbs语句则可以。比如 about 协议:
mshta "about:"
确切的说法应该是,用vbscript协议运行的代码中,不能包含语句,只能是表达式和函数(此时函数其实也是表达式)。这里的语句是vbs概念中的语句(statement),而不是普通
的“一句话”的意思(sentence)。
msgbox "内容",0,"标题",这个的确是一条语句,而不是“相当于”。e=inputbox("内容"),在vbs脚本,它可以作为语句(赋值语句)也可以是表达式(比较变量e与函数inputbox
("内容")的返回值)。
如果用vbscript协议运行,则它只是比较表达式。
vbscript协议运行代码可以用&连接不同的表达式,这个发现不错。其实就是表达式连接符。但如果要运行更复杂的语句,最好是用execute。execute也很简单。
SendKeys.Send("^+{TAB}"); 题目永远不在于如何应用思维里产生极新的、发明性的思惟,而在于如何从思维里镌汰旧观念。SendKeys.Send("^+{TAB}");没有风波,就不克不及显示帆的本质;没有盘曲,就无法咀嚼人生的乐趣。应用SendKeys将键击和组合键击发送到活动应用法度。此类无法实例化。若要发送一个键击给某个类并立即持续法度流,请应用Send。若要守候键击启动的任何过程,请应用SendWait。
每个键都由一个或多个字符默示。若要指定单个键盘字符,请应用该字符本身。例如,若要默示字母 A,请将字符串“A”传递给办法。若要默示多个字符,请将各个附加字符追加到它之前的字符的后面。若要默示字母A、B和C,请将参数指定为“ABC”。
加号(+)、插入符号(^)、百分号(%)、波浪号(~)以及圆括号()对 SendKeys 具有特别含义。若要指定这些字符中的某个字符,请将其放在大括号 ({}) 内。例如,若要指定加号,请应用“{+}”。若要指定大括号字符,请应用“{{}”和“{}}”。中括号 ([ ]) 对 SendKeys 没有特别含义,但必须将它们放在大括号内。在其他应用法度中,中括号具有特别含义,此含义可能会在产活泼态数据互换(DDE)时起首要感化。
若要指定在按键(如ENTER或TAB)时不显示的字符,以及默示操纵而不默示字符的键,请应用下表中的代码: 键 代码
BACKSPACE {BACKSPACE}、{BS} 或 {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL 或 DELETE {DELETE} 或 {DEL}
DOWN ARROW(下箭头键) {DOWN}END {END}ENTER {ENTER} 或 ~ESC {ESC}HELP {HELP}
HOME {HOME}
INS 或 INSERT {INSERT} 或 {INS}
LEFT ARROW(左箭头键) {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}(保存供将来应用)
RIGHT ARROW(右箭头键) {RIGHT}
SCROLL LOCK {SCROLLLOCK}TAB {TAB}UP ARROW(上箭头键) {UP}F1 {F1}F2 {F2}F3 {F3}F4 {F4}F5 {F5}F6 {F6}F7 {F7}F8 {F8}F9 {F9}F10 {F10}F11 {F11}F12 {F12}F13 {F13}F14 {F14}F15 {F15}F16 {F16}数字键盘加号 {ADD}
数字键盘减号 {SUBTRACT}
数字键盘乘号 {MULTIPLY}
数字键盘除号 {DIVIDE}
若要指定与SHIFT、CTRL和ALT键的随便率性组合一路应用的键,请在这些键代码之前加上以下一段或多段代码。 键 代码SHIFT +CTRL ^ALT %若要指定在按一些键时应同时按住SHIFT、CTRL和ALT键的随便率性组合,请将这些键的代码放在括号内。例如,若要指定按E和C时同时按住SHIFT键,请应用“+(EC)”。若要指定按E时应按住SHIFT,之后按C时不按住 SHIFT,请应用“+EC”。
要指定反复的键,请应用 {键数字} 的情势。键和数字之间必须放一空格。例如,{LEFT 42} 默示按左箭头键 42 次;{h 10} 默示按H 10次。
本质需要利用vbs实现,本例只是利用批处理生成vbs脚本文件,执行脚本文件后删除而已。
@echo off ::关闭命令回显
echo set object^=createobject("wscript.shell")>temp.vbs
rem 生成vbs语句输出到temp.vbs
echo object.sendkeys "^{F12}">>temp.vbs
rem 生成第二条vba语句附加到temp.vbs,^{F12}表示发送ctrl+F12快捷键,可根据需求修改
temp.vbs
rem 执行temp.vbs
del /q temp.vbs
rem 删除调用完成的temp.vbs
mshta命令可以在批处理中结合其他语言的代码,也就包含VBS
mshta vbscript:createobject("wscript.shell").sendkeys("{f12}{^}")(window.close)
{^}代表ctrl键
我这样的才能在批处理中运行,一楼的是VBS,楼下的不许抄袭哦,快给分,不懂的你继续问,我补充
可以用批处理生成一个VBS文件, 然后再执行这个 VBS 不过实质还是用VBS实现的 代码如下:
@echo off
echo set object^=createobject("wscript.shell")>temp.vbs
echo object.sendkeys "^{F12}">>temp.vbs
temp.vbs
del /q temp.vbs