VBS中CreateObject和WScript.CreateObject的区别

多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 http://www.111cn.net
Do
    WScript.Sleep 1000
Loop

Sub IE_OnQuit()
    MsgBox "正在关闭Demon's Blog"
    WScript.Quit

End SubCreateObject和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
'http://www.111cn.net

t = Timer
For i = 1 To 100000
    Set WshShell = CreateObject("Wscript.Shell")
Next

WScript.Echo Timer - tDemon的建议:尽量使用CreateObject函数,除非你需要响应事件。这样至少有三个好处:可移植性更好、速度更快、代码更短。

时间: 2024-11-03 09:40:52

VBS中CreateObject和WScript.CreateObject的区别的相关文章

VBS中CreateObject和WScript.CreateObject的区别介绍_vbs

CreateObject和WScript.CreateObject的区别一: CreateObject是VBS的内置函数,属于语言的一部分:而WScript.CreateObject是Windows脚本宿主(wscript.exe和cscript.exe)提供的WScript对象的方法.类似于批处理中内部命令和外部命令的关系.在VBS中,CreateObject总是可用的,而WScript.CreateObject只有在宿主为wscript.exe和cscript.exe的情况下才可以使用,在W

VBS中Run和Exec的区别_vbs

Set ws = CreateObject("WScript.Shell") '这里创建一个对象引用,以便在以下示例代码中使用. 'Demon注:这个变量名怎么这么猥琐(WS) 语法:(常识(Demon注:常识这个词我喜欢):作为过程使用时,不要加括号,否则出现编译器错误(参数唯一或没有时加括号不会出错,但建议不要加)) 复制代码 代码如下: ws.Run(strCommand, [intWindowStyle], [bWaitOnReturn]) [Set objExec =] ws

windows-关于VBS中调用MSWINsock.Winsock

问题描述 关于VBS中调用MSWINsock.Winsock 目前在编写一个通过TCP协议给server发送特定消息的小程序. 发送代码如下: msglog=vbslogFile.ReadLine dim sock '赋值sock变量为WINSOCK的对象 set sock=Wscript.createobject("MSWINsock.Winsock") '设置SOCK的连接方式为 TCP 'WINSOCK的Protocol属性中 0 表示TCP,1 表示 UDP sock.Prot

VBS中inlcude另一个vbs脚本的方法

VBS中inlcude另一个vbs脚本的方法54powerman' Test program for the IncludeFile and ReadConfigFile functions.' Author: Christian d'Heureuse (www.source-code.biz)' License: GNU/LGPL (http://www.gnu.org/licenses/lgpl.html) Option Explicit Dim fso: set fso = CreateO

VBS中常用脚本代码_vbs

将域用户或租添加到本地组 Set objGroup = GetObject("WinNT://./Administrators") Set objUser = GetObject("WinNT://testnet/Engineers") objGroup.Add(objUser.ADsPath) 修改本地管理员密码 Set objcnlar = GetObject("WinNT://./administrator, user") objcnla.

在一个vbs中包含其他vbs文件的方法_vbs

asp中   include file   包含其他文件vbs中 复制代码 代码如下:  Option Explicit  On Error Resume Next Sub include(vbs)  Dim fso : Set fso = CreateObject("scripting.FileSystemObject")  Dim p : p   = Split(Wscript.ScriptFullName,"\")  p(UBound(p))  = vbs  

在VBS中定义字节数组Byte()介绍_vbs

晚上在 QQ 上看到昵称为"乱码"的好友回答了搜搜问问里一个问题: 在VBS中有办法定义字节数组么? 在VBS中有办法定义字节数组么?就是字节子类型数组(VarType是8209的那种)注意不是VB! 但是回答实在是不堪入目,连别人问什么都没搞懂,而且那人居然还满意,真不知道他在想什么. 闲来没事,我来简单回答一下.首先要搞清楚别人在问什么,VBS 是弱类型脚本语言,只有一种数据类型,称为 Variant,但是 Variant 可以进一步分为几种子类型,这里不展开,详见<VBSc

VBS中SendKeys的基本应用_vbs

ps:不知道有人还记得这个攻击qq群的代码?就是利用这个所写的!SendKeys 模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行,  其使用格式为:object.SendKeys string  "object":表示WshShell对象  "string":表示要发送的按键指令字符串,需要放在英文双引号中.  1.基本键  一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母"x",使用&

VBS中InStrRev函数的第三个参数(Start)使用注意事项_vbs

VBS中InStrRev函数使用过不少,但是几乎没有用过第三个参数,今天才发现第三个参数的用法跟我想的不太一样. 文档中是这么描述InStrRev函数的: 复制代码 代码如下: 返回某字符串在另一个字符串中出现的从结尾计起的位置. InStrRev(string1, string2[, start[, compare]]) 参数 string1 必选项.接受搜索的字符串表达式. string2 必选项.被搜索的字符串表达式. Start 可选项.数值表达式,用于设置每次搜索的开始位置.如果省略,