『第
5 楼』:
可以用如下的格式调用一句VBS脚本:
mshta vbscript:ONE_VBS_METHOD
因为 mshta 是执行 .hta 文件的,而 HTA 文件的本质就是 html 文档,因此能调用 html 文件中能够使用的脚本,但有些东西是被限制的,下面是一个在命令行窗口中执行的例子。
比如下面的一个脚本:
Set fso = CreateObject("Scripting.FileSystemObject")
temp = fso.GetSpecialFolder(2)
MsgBox "当前临时文件夹是 " & temp, 4160, "提示" 由于命令行只能是一行,所以需要把它搞成一行的格式,冒号在VBS中做分行功能:
Set fso = CreateObject("Scripting.FileSystemObject"):temp = fso.GetSpecialFolder(2):MsgBox "当前临时文件夹是 " & temp, 4160, "提示" 又因为 mshta 被作为一个命令执行,我们的脚本只是作为参数,并且 ONE_VBS_METHOD 就直接是运行的脚本,不能用引号,但是 mshta 又只接受冒号后面的第一个参数,即 ONE_VBS_METHOD 必须是一个没有分隔的语句,为了解决这个问题用 execute 或者 eval 包装一下,注意变成字符串后一个引号要换成两个:
Execute("Set fso = CreateObject(""Scripting.FileSystemObject""):temp = fso.GetSpecialFolder(2):MsgBox ""当前临时文件夹是 "" & temp, 4160, ""提示""") 上面的都是合法的VBScript脚本,可以保存为 .vbs 文件直接运行的。
于是得到下面一行命令,在CMD命令行界面执行:
mshta vbscript:Execute("Set fso = CreateObject(""Scripting.FileSystemObject""):temp = fso.GetSpecialFolder(2):MsgBox ""当前临时文件夹是 "" & temp, 4160, ""提示""") 但是运行之后发现残留一个 HTA 的窗口不自动关闭,因此一般再加上一个HTML中关闭窗口的代码,变成:
mshta vbscript:Execute("Set fso = CreateObject(""Scripting.FileSystemObject""):temp = fso.GetSpecialFolder(2):MsgBox ""当前临时文件夹是 "" & temp, 4160, ""提示"":Window.Close") 多余的话:
第一句,这个其实是运行在HTML中的脚本形式,因此还可以使用其他一些浏览器中的方法,实现脚本本身不具备的功能
mshta vbscript:Execute("x = Screen.Width:y = Screen.Height:Window.Alert ""当前显示器分辨率是 "" & x & ""×"" & y:Window.Close") 第二句,关于VBScript中的引号是个很纠结的问题,如果用JScript或者JavaScript就没这么麻烦了,因为 ' 和 " 效果相同,避免了转换时搞引号的问题,但是少了WScript、MsgBox等方便的东西
mshta javascript:eval("var fso = new ActiveXObject('Scripting.FileSystemObject');var temp = fso.GetSpecialFolder(2);window.alert('当前临时文件夹是 ' + temp);window.close()"); (不建议新手或者对大小写不敏感者使用JScript或者JavaScript!)
|