有没有办法在VBS中列出已创建对象的可用方法?
例如:
Set IE = CreateObject("InternetExplorer.Application")
我想列出此对象的可用属性,如:
IE.AddressBar
IE.Application
IE.Busy
...
或方法:
IE.ClientToWindow
IE.ExecWB
IE.GetProperty
...
如何在VBS中发现任意有效对象的可用属性?
答案 0 :(得分:11)
VBScript本身不支持TypeName
和VarType
函数之外的类型内省,这将为您提供对象的类型,但不会授予您访问其内部结构的权限。
正如其他答案所解释的那样,有一个DLL可以提供此功能,但它不附带Windows,因为它是旧版Visual Studio的一部分,现在可能没有合法的方法来获取它。
答案 1 :(得分:9)
虽然这部分属实,但其不完整.... Google,GetObjectText_,Methods_,&化子性质_
引用的方法仅适用于通过WbemScripting.SWbemLocator对象连接到远程主机的cimv2命名空间时收集的对象。如果这个对象能够在localhost上工作,那对我来说是不明白的。
执行此操作后,您可以查询其中的任何类[Win32_Services,Win32_Drives等],并使用对象上的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 oMethod in oObject.Methods_
wScript.Echo oProp.Name
Next
最后,......
For Each oProp in oObject.Properties_
'This will display all of an objects properties
oProp.GetObjectText_
Next
答案 2 :(得分:8)
使用TypeLib Information Objects
中的tlbinf32.dll
,可以列出班级的所有成员。
<子>
tlbinf32.dll
是 Visual Studio 6.0 的一部分,它是2000年左右的当前版本。微软似乎不再提供DLL供下载(2017年中期情况),但你可以下载它来自互联网上的各种网站。我在https://www.dll4free.com/tlbinf32.dll.html或其他网站上找到了版本 1.1.88.4,Build 8804,版权所有Matthew Curland 1996,Microsoft 1997-2000,大小148.480字节。
子>
<子>
要在Win32中安装DLL,请将其从该目录复制到%windir%\System32
和作为管理员调用regsvr32.exe tlbinf32.dll
。
子>
<子>
要在Win64中安装DLL,请将其复制到%windir%\syswow64
,然后将作为管理员注册到%windir%\syswow64\regsvr32.exe
,最后使用%windir%\syswow64\cscript.exe
(或{{1}运行vbscript }})。感谢BuvinJ
以下脚本演示了包含函数wscript.exe
,它将返回一个带有传递变量类型的字符串;如果是Object,则所有成员都有详细信息,包括VariableInfo
类型,可调用类型(Property
或Sub
),以及函数的参数名称和返回类型。在Function
对象的情况下,对象的类型名称将是已实现接口的名称。不确定它是否适用于多个已实现的接口,但AFAIK无法通过COM
在一个类中实现多个接口。
它不支持任何方式的递归,因为这会导致某些类型的无限循环。
这个会在VBS中为您提供几乎全面的反思。非常适合使用 Microsoft Script Debugger 来探索API。
COM
有关 Typelib接口的更多信息,请从Microsoft KB artivle 224331获取文档帮助文件
马修·柯兰德(Matthew Curland)可以在网站上下载他的书籍Advanced Visual Basic 6作为评估版本Type Library Editor (EditTLBEval.exe),以及相应的Documentation
特别是在这种情况下,我非常喜欢这一行如果您是一名拒绝承认VB普遍接受的限制的Visual Basic开发人员,那么本书绝对适合您。由泰德帕蒂森。只需在此处用VBScript替换VB。
TLI的{p> VBWebProfi gave the hint,谢谢你。但是,编写细节和编写代码需要几个小时的工作时间; - )答案 3 :(得分:1)
如果您正在使用HP UFT或QTP,请按以下步骤操作:
1)在您的笔记本电脑上安装任何版本的MS Visual Studio。 (不要担心许可,你不会运行VS)
2)重新启动计算机。
3)启动UFT或QTP,加载脚本并按F11,(或暂停在您要检查的对象附近的任何代码段。)
4)将对象添加到Watch窗口。它可以是Object Repository对象或程序描述。
如果对象存在,该对象现在将在Watch窗口中显示两个加号(+),可以展开以显示所有可用的方法和属性,以及可以展开的子对象。
答案 4 :(得分:1)
使用TLI。 TLI.TLIApplication
类(来自tlbinf32.dll
)可以检查其实例中的各种COM对象。浏览Excel或其他支持脚本的Microsoft产品中的TLI库,并具有能够添加引用的脚本编辑器,然后添加tlbinf32.dll
。引用中的名称是“Typelib信息”。
请注意,DLL不附带Windows。
将方法InterfaceInfoFromObject()
用于VBScript类,或者尝试ClassInfoFromObject()
。
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
答案 5 :(得分:0)
试试这个......
For i = 0 To webElementCount-1 Step 1
innertextProp = myValue2(i).GetROProperty("innertext")
print i & innertextProp
print innertextProp
Next