标题: VBS中没有vbHide常量
作者: Demon
链接: https://demon.tw/programming/vbs-vbhide.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
在某些不明真相的同学眼中,VBS的作用似乎仅限于隐藏批处理的黑窗,于是网上流传着类似于这样的代码:
Dim WshShell Set WshShell = CreateObject("Wscript.Shell") WshShell.Run "cmd /c test.bat", vbHide
假设test.bat的代码如下:
start https://demon.tw
那么就可以隐藏运行批处理达到打开Demon博客的目的。不要笑,很多只会批处理的人就是这么做的。
且不说批处理能实现的VBS都能实现,完全没有用VBS运行批处理必要。就单单看上面那段VBS吧,vbHide是什么东西?VBS内置常量?遗憾的是,VBS中并没有vbHide常量(见《VBS内置常量大全》)。
如果你在怀疑我的正确性,那么可以测试下面的代码:
vbHide = "https://demon.tw" vbCrLf = "Demon's Blog"
vbCrLf是内置常量,对常量进行赋值会导致运行时错误:非法赋值: ‘vbCrLf’;而对vbHide赋值时VBS并没有抱怨什么,很高兴的运行了。
回过头来,为什么上面的VBS能够隐藏窗口呢?因为vbHide被当成了变量,由于没有赋值,默认值为0。
顺便提一下,在VB里面是有vbHide常量的,一般在Shell函数中使用:
Private Sub Command1_Click() Shell "notepad.exe", vbHide End Sub
在网上经常有人说,VBS完全没有必要学,学会VB,VBS自然也就懂了。虽然两者在语法上很类似,但是VBS毕竟是VB的子集,两者在某些细节上还是存在差别的。懂VB不见得懂VBS,懂VBS不见得懂VB。
所以上面那段VBS应该是某个只懂VB的人写的,然后被一群不经过大脑的人抄来抄去。最后说一句,网上流传的垃圾代码很多,抄之前请自行斟酌,否则只会显得你很无知。
赞赏微信赞赏支付宝赞赏
随机文章:
– – 比较喜欢用true
正常,大部分技术内容的博客都是东抄抄西抄抄
Demon 大神,今天我再次翻回了这篇文章,发现有一处可能有些错误。
“因为vbHide被当成了变量,由于没有赋值,默认值为0。”
主要是,对于未被赋值的变量,他的值本来是 Empty 的。至于为什么是 Empty,因为 TypeName(vbHide) 返回的是 “Empty”,而 Empty 类型仅有一种值就是 Empty。对于 Empty 来说,这个值在不同的情况下会被当作转换成不同类型的值来用。
例如如果 MsgBox vbHide,弹出的是空内容,因为 MsgBox 第一个参数需要一个字符串。
这里 WshShell.Run 的第二个参数需要一个数值,故而 vbHide 在此被视为 0。