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