列出对象方法和属性

时间:2013-01-13 16:52:45

标签: reflection vbscript

有没有办法在VBS中列出已创建对象的可用方法?

例如:

Set IE = CreateObject("InternetExplorer.Application")

我想列出此对象的可用属性,如:

IE.AddressBar
IE.Application
IE.Busy
...

或方法:

IE.ClientToWindow
IE.ExecWB
IE.GetProperty
...

如何在VBS中发现任意有效对象的可用属性?

6 个答案:

答案 0 :(得分:11)

VBScript本身不支持TypeNameVarType函数之外的类型内省,这将为您提供对象的类型,但不会授予您访问其内部结构的权限。

正如其他答案所解释的那样,有一个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

hint

以下脚本演示了包含函数wscript.exe,它将返回一个带有传递变量类型的字符串;如果是Object,则所有成员都有详细信息,包括VariableInfo类型,可调用类型(PropertySub),以及函数的参数名称和返回类型。在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