Is there any way to list available methods for created object in VBS?
For example:
Set IE = CreateObject("InternetExplorer.Application")
I want to list available properties of this object, as:
IE.AddressBar
IE.Application
IE.Busy
...
or methods:
IE.ClientToWindow
IE.ExecWB
IE.GetProperty
...
How can I discover available properties to arbitrary valid object in VBS?
Use TLI . The
TLI.TLIApplication
class (fromtlbinf32.dll
) can inspect various COM objects from their instance. Explore the TLI library in Excel or other Microsoft product that supports scripting and has an script editor which is able to add references, then addtlbinf32.dll
. The name in the references is "Typelib information".Note that the DLL does not ship with Windows, though.
Use the method
InterfaceInfoFromObject()
for VBScript classes and alternatively tryClassInfoFromObject()
.If you happen to be using HP UFT or QTP then follow these steps:
1) Install any version of MS Visual Studio onto your laptop. (Don't worry about licensing, you won't be running VS)
2) Reboot your computer.
3) Launch UFT or QTP, load a script and hit F11, (or pause at any piece of code that is near the object you want to inspect).
4) Add the object to the Watch window. It can be an Object Repository object or a programmatic description.
If the object exists, the object will now display two Plus (+) signs in the Watch window that can be expanded to show all available Methods and Properties, as well as child objects that can be expanded.
While that is partially true, its incomplete.... Google, GetObjectText_, Methods_, & Propeties_
The referenced methods will only work on objects collected while connected to the cimv2 namespace of a remote host via the WbemScripting.SWbemLocator object. If this object has the ability to work on localhost, it's unapparent to me.
Once you do this you can query any of the classes held therein [Win32_Services,Win32_Drives, etc] and interrogate the objects in the resultset using a For-Next loop on the object like below...
Or...
Finally, ...
VBScript itself does not support type introspection outside the
TypeName
andVarType
functions, which will give you the type of an object, but won't give you access to its internal structure.As other answers explained there is a DLL that would provide this feature, but it doesn't ship with Windows, and since it was part of an old version of Visual Studio there might not be a legal way to obtain it nowadays.
Using
TypeLib Information Objects
fromtlbinf32.dll
it is possible to list all members of a class.tlbinf32.dll
was part of Visual Studio 6.0, which was the current release in the years around 2000. Microsoft seems to not offer the DLL for download anymore (situation mid 2017), but you can download it from various sites on the internet. I found version 1.1.88.4, Build 8804, Copyright Matthew Curland 1996, Microsoft 1997-2000, size 148.480 Bytes at https://www.dll4free.com/tlbinf32.dll.html, or other sites.To install the DLL in Win32, copy it to
%windir%\System32
and as administrator callregsvr32.exe tlbinf32.dll
from that directory.To insttall the DLL in Win64, copy it to
%windir%\syswow64
, then as administrator register with%windir%\syswow64\regsvr32.exe
, and finally run the vbscript with%windir%\syswow64\cscript.exe
(orwscript.exe
). Thanks BuvinJ for the hintThe following script demonstrates the included function
VariableInfo
which will return a string with the type of the passed variable, and in case of an Object, all members with details, including type ofProperty
, callable type (Sub
orFunction
), and parameter names and return type in case of Function. The type name of the object in case of aCOM
object would be the name of the implemented Interface. Not sure if it works for multiple implemented interfaces, but AFAIK it's not possible to implement multiple interfaces in one class viaCOM
anyway.It does not support recursion in any way, because this would lead to infinity loops for some types.
This will give you virtually full working reflection in VBS. Great to explore APIs for example with the Microsoft Script Debugger.
For for more information about the Typelib Interface, get the documentation help file from Microsoft KB artivle 224331
Matthew Curland offers for download at the website to his book Advanced Visual Basic 6 the nice program Type Library Editor (EditTLBEval.exe) as evaluation version, and the according Documentation
Especially in this context I really like the line If you're a Visual Basic developer who refuses to recognize the commonly accepted limitations of VB, this book is definitely for you. by Ted Pattison. Just replace VB by VBScript here.
VBWebProfi gave the hint for TLI, thanks for that. Working out the details and writing the code was several hours of work, though ;-)
Try this ...