标题: VBS中CreateObject和WScript.CreateObject的区别
作者: Demon
链接: https://demon.tw/programming/vbs-createobject-wscript-createobject.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
很多VBS新手都很困惑CreateObject和WScript.CreateObject有什么区别,为什么一些代码中用CreateObject,而另一些却用WScript.CreateObject?
CreateObject和WScript.CreateObject的区别一:
CreateObject是VBS的内置函数,属于语言的一部分;而WScript.CreateObject是Windows脚本宿主(wscript.exe和cscript.exe)提供的WScript对象的方法。类似于批处理中内部命令和外部命令的关系。在VBS中,CreateObject总是可用的,而WScript.CreateObject只有在宿主为wscript.exe和cscript.exe的情况下才可以使用,在WMI、QTP、SecureCRT、EmEditor等其他宿主环境是无法使用的。
CreateObject和WScript.CreateObject的区别二:
如果只用第一个参数,那么CreateObject和WScript.CreateObject几乎是相同的;但是如果要用到第二个参数,那么两者就完全不同了。CreateObject的第二个参数用来通过DCOM在远程服务器上创建对象;而WScript.CreateObject的第二个参数用来创建本地对象并响应事件。
一个响应事件的简单例子:
Dim IE Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_") IE.Visible = True IE.Navigate "https://demon.tw" Do WScript.Sleep 1000 Loop Sub IE_OnQuit() MsgBox "正在关闭Demon's Blog" WScript.Quit End Sub
CreateObject和WScript.CreateObject的区别三:
因为CreateObject是VBS的内置函数,不需要通过COM来调用,所以CreateObject比WScript.CreateObject要稍微快一点点(虽然几乎可以忽略不计):
t = Timer For i = 1 To 100000 Set WshShell = WScript.CreateObject("Wscript.Shell") Next WScript.Echo Timer - t 'By Demon 'https://demon.tw t = Timer For i = 1 To 100000 Set WshShell = CreateObject("Wscript.Shell") Next WScript.Echo Timer - t
Demon的建议:尽量使用CreateObject函数,除非你需要响应事件。这样至少有三个好处:可移植性更好、速度更快、代码更短。
赞赏微信赞赏支付宝赞赏
随机文章:
因为这些VBS新手从来不看微软的参考手册。。。
虽然我注意到过这个细节,但是还真不知道他们有这么大的区别