如何更改系统对象的行为

时间:2016-07-26 15:14:59

标签: vbscript

我是Visual Basic的新手,我想知道如何更改系统对象的默认行为。我想要完成的是“修补”一些系统功能,例如通过HTTP下载或启动进程。

我设法编写了一段代码,我认为它可以完成我想做的事情,但没有成功(我无法使其工作)

Function PatchedMethod(Method, Url)
    WScript.Echo Method, Url    
End Function

Dim xHttp: Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim bStrm: Set bStrm = CreateObject("Adodb.Stream")

'//patching
Set xHttp.Open = GetRef(PatchedMethod)

xHttp.Open "GET", "https://www.python.org/static/img/python-logo.png", False

我想要完成的一些Python等效片段是

import urllib.request

def mockup_urlopen(*args, **kwargs):
    print("Trying to download {}".format(args[0]))
    exit()

urllib.request.urlopen = mockup_urlopen
r = urllib.request.urlopen("https://www.python.org/static/img/python-logo.png")

1 个答案:

答案 0 :(得分:1)

VBScript中的函数不是"第一类对象"就像他们使用其他语言,如JavaScript。你不能只是重新分配它们。包装COM对象以扩展功能的标准方法是在您自己的类中组合它。也就是说,创建一个VBScript Class,它公开了代码所需功能的方法,并在内部调用" real"对象你通过封装包装。然后,您的代码使用类的实例来完成工作而不是内部对象。