Reflection 列出对象方法和属性
有没有办法列出VBS中创建对象的可用方法 例如:Reflection 列出对象方法和属性,reflection,vbscript,Reflection,Vbscript,有没有办法列出VBS中创建对象的可用方法 例如: Set IE = CreateObject("InternetExplorer.Application") 我想列出此对象的可用属性,如下所示: IE.AddressBar IE.Application IE.Busy ... 或方法: IE.ClientToWindow IE.ExecWB IE.GetProperty ... 如何在VBS中发现任意有效对象的可用属性?VBScript本身不支持和函数之外的类型自省,这将为您提供对象的类型
Set IE = CreateObject("InternetExplorer.Application")
我想列出此对象的可用属性,如下所示:
IE.AddressBar
IE.Application
IE.Busy
...
或方法:
IE.ClientToWindow
IE.ExecWB
IE.GetProperty
...
如何在VBS中发现任意有效对象的可用属性?VBScript本身不支持和函数之外的类型自省,这将为您提供对象的类型,但不允许您访问其内部结构
正如其他答案所解释的,有一个DLL可以提供此功能,但它不随Windows提供,而且由于它是旧版Visual Studio的一部分,因此现在可能没有合法的方式获取它。虽然这部分是正确的,但它不完整。。。。Google、GetObjectText、方法和属性_ 引用的方法仅适用于通过WbemScripting.SWbemLocator对象连接到远程主机的cimv2命名空间时收集的对象。如果这个对象能够在本地主机上工作,我就看不到它 完成此操作后,您可以查询其中包含的任何类[Win32_服务、Win32_驱动器等],并使用对象上的For Next循环查询结果集中的对象,如下所示
For Each oProp in oObject.Properties_
'be careful here because some propeties may be an object or an array.
'so test for that here using "typename" or "vartype"
wScript.Echo oProp.Name & vbTab & oProp
Next
或者
最后
For Each oProp in oObject.Properties_
'This will display all of an objects properties
oProp.GetObjectText_
Next
如果您碰巧正在使用HP UFT或QTP,请执行以下步骤: 1) 在笔记本电脑上安装任何版本的MS Visual Studio。(不用担心许可问题,您不会运行VS) 2) 重新启动计算机 3) 启动UFT或QTP,加载脚本并点击F11(或在您要检查的对象附近的任何代码处暂停) 4) 将对象添加到“监视”窗口。它可以是对象存储库对象或编程描述 如果该对象存在,则该对象现在将在监视窗口中显示两个加号(+),可以展开该加号以显示所有可用的方法和属性,以及可以展开的子对象。试试这个
For i = 0 To webElementCount-1 Step 1
innertextProp = myValue2(i).GetROProperty("innertext")
print i & innertextProp
print innertextProp
Next
使用TLI。
TLI.tliaApplication
类(来自tlbinf32.dll
)可以从实例中检查各种COM对象。在Excel或其他支持脚本的Microsoft产品中浏览TLI库,并使用脚本编辑器添加引用,然后添加tlbinf32.dll
。引用中的名称是“Typelib信息”
但是请注意,DLL不随Windows提供
对VBScript类使用方法interface info fromObject()
,或者尝试classinfo fromObject()
使用
tlbinf32.dll
中的TypeLib信息对象
,可以列出类的所有成员
`tlbinf32.dll`是*VisualStudio6.0*的一部分,这是2000年前后的最新版本。微软似乎不再提供DLL供下载(2017年年中的情况),但你可以从互联网上的各个网站下载它。我发现版本*1.1.88.4,版本8804,版权所有,微软1997-2000,大小148.480字节*https://www.dll4free.com/tlbinf32.dll.html,或其他网站。
要在Win32中安装DLL,请将其复制到“%windir%\System32”,并*作为管理员*从该目录调用“regsvr32.exe tlbinf32.DLL”。
要在Win64中安装DLL,请将其复制到“%windir%\syswow64”,然后*以管理员身份*注册到“%windir%\syswow64\regsvr32.exe”,最后使用“%windir%\syswow64\cscript.exe”(或“wscript.exe”)运行vbscript。感谢[BuvinJ](/users/3220983/BuvinJ)的[hint](/questions/14305750/list object methods and properties/44459670?noredirect=1 35; comment86169321 _44459670)
下面的脚本演示了包含的函数VariableInfo
,该函数将返回一个带有所传递变量类型的字符串,如果是对象,则返回包含详细信息的所有成员,包括属性的类型
、可调用类型(Sub
或function
),以及函数的参数名和返回类型。在COM
对象的情况下,对象的类型名称将是实现的接口的名称。不确定它是否适用于多个实现的接口,但无论如何,通过COM
在一个类中实现多个接口是不可能的
它不以任何方式支持递归,因为这将导致某些类型的无限循环
此将在VBS中为您提供几乎完整的工作反射。非常适合探索API,例如使用Microsoft脚本调试器
通过tlbinfo32.dll反射VBScript
'
帕特里克·斯特拉瑟·米哈伊尔2017-2021
“Ansgar Wiechers 2019
' https://stackoverflow.com/questions/14305750/list-object-methods-and-properties/44459670#44459670
'
'v1.1 2021-02-01:显示数组和对象的值,但仅显示一个级别
'返回一个字符串,该字符串描述在第一级传递的对象/变量,
“没有递归。
函数变量信息(obj)
VariableInfo=VariableInfoToLevel(obj,0,1)
端函数
'返回一个字符串,该字符串描述在第一级传递的对象/变量,
'递归到最高级别(0=无递归)。
函数变量InfoToLevel(对象、级别、最大级别)
Const invokeKindPropertyGet=0'简单数据成员
Const invokeKindFunction=1'方法:子或函数
Const invokeKindPropertyPut=2'文档:具有值设置器;现实:更像是可设置的
Const invokeKindPropertyPutRef=4'文档:具有引用设置器;现实:更像是不可设置的
如果液位>最大液位,则
VariableInfoToLevel=“”
退出功能
如果结束
尺寸缩进:缩进=空间(4*级)
VariableInfoToLevel=缩进
如果是空的(obj)或_
isNull(obj)_
然后
VariableInfoToLevel=VariableInfoToLevel&TypeNameFromVarType(VarType(obj))
如果不是IsObject(obj),则
如果不是isArray(obj),则
VariableInfoToLevel=indent&TypeNameFromVarType(VarType(obj))&“,值:[”&
For i = 0 To webElementCount-1 Step 1
innertextProp = myValue2(i).GetROProperty("innertext")
print i & innertextProp
print innertextProp
Next
Option Explicit
Dim TLI
Dim MyObject
Dim TypeInfo
Dim MemberInfo
Set TLI = CreateObject("TLI.TLIApplication")
Set MyObject = New MyClass
Set TypeInfo = TLI.InterfaceInfoFromObject(MyObject)
For Each MemberInfo In TypeInfo.Members
WScript.Echo MemberInfo.Name
Next
Class MyClass
Dim Name_
Public Property Get Name
Name = Name_
End Property
Public Property Let Name(ByVal Value)
Name_ = Value
End Property
End Class