VBS中没有vbHide常量

标签: , , , ,

在某些不明真相的同学眼中,VBS的作用似乎仅限于隐藏批处理的黑窗,于是网上流传着类似于这样的代码:

Dim WshShell
Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run "cmd /c test.bat", vbHide

假设test.bat的代码如下:

start http://demon.tw

那么就可以隐藏运行批处理达到打开Demon博客的目的。不要笑,很多只会批处理的人就是这么做的。

且不说批处理能实现的VBS都能实现,完全没有用VBS运行批处理必要。就单单看上面那段VBS吧,vbHide是什么东西?VBS内置常量?遗憾的是,VBS中并没有vbHide常量(见《VBS内置常量大全》)。

如果你在怀疑我的正确性,那么可以测试下面的代码:

vbHide = "http://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的人写的,然后被一群不经过大脑的人抄来抄去。最后说一句,网上流传的垃圾代码很多,抄之前请自行斟酌,否则只会显得你很无知。

随机文章:

  1. VbsEdit 5.6.1新增功能
  2. 全角空格?
  3. OpenWrt Dnsmasq DHCP MAC地址过滤
  4. NDS模拟器iDeaS
  5. 效率低下的Split函数,用VBS的人你伤不起

3 条评论 发表在“VBS中没有vbHide常量”上

  1. prophetk说道:

    – – 比较喜欢用true

  2. maz-1说道:

    正常,大部分技术内容的博客都是东抄抄西抄抄

  3. Icy_Ybk说道:

    Demon 大神,今天我再次翻回了这篇文章,发现有一处可能有些错误。
    “因为vbHide被当成了变量,由于没有赋值,默认值为0。”
    主要是,对于未被赋值的变量,他的值本来是 Empty 的。至于为什么是 Empty,因为 TypeName(vbHide) 返回的是 “Empty”,而 Empty 类型仅有一种值就是 Empty。对于 Empty 来说,这个值在不同的情况下会被当作转换成不同类型的值来用。
    例如如果 MsgBox vbHide,弹出的是空内容,因为 MsgBox 第一个参数需要一个字符串。
    这里 WshShell.Run 的第二个参数需要一个数值,故而 vbHide 在此被视为 0。

留下回复