Sign in to follow this  
Followers 0
redrider81

Object Type Introspection Support in Autoit

10 posts in this topic

Is there any programmatic way to return a string or array showing all the property names of an AutoIt object when you do not know their names, or how many there are?

Based on what I've read so far, I believe the concept is called "Type Introspection" and is only available in some advanced languages. 

Sources:

http://stackoverflow.com/questions/14305750/list-object-methods-and-properties

http://en.wikipedia.org/wiki/Type_introspection

Thanks in advance. 

 

Share this post


Link to post
Share on other sites



I was about to write the same as JohnOne.


_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

Thanks for the fast replies!

I'm dealing with objects as created by ozmike's amazing json UDF:

'?do=embed' frameborder='0' data-embedContent>>

I asked ozmike the question specifically regarding objects created by his UDF, but I posted the question here for a more broad discussion because it did seem like it would depend on nature of the object, and I've been learning more about working with objects lately. 

Interestingly, he posted a method for achieving the goal, but I did not have time to test, as I had already implemented a workaround based on string manipulation. I get the feeling his method only works for those JSON objects, but probably would not work unless specifically programmed into other UDFs. 

For the curious, the reason we won't know the property names is that we're working with a web API that returns everything as JSON data.  This includes lists of users, servers, and groups.  Each of these supports arbitrary properties on the objects. 

Unless anyone else happens to have found a way in the past, I will conclude the general answer is no for most objects such as COM/ActiveX, and AutoIT Objects. 

Regards,

Jerry

Share this post


Link to post
Share on other sites


Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Share this post


Link to post
Share on other sites

Thanks for the reply SmOke_N , but unfortunately I am not sure this addresses the use case (or maybe I'm just not understanding it).  I think this requires a definitions file, a viewer, and a manual process.  All the properties of my object will be un-knowable until runtime, at which point they could literally have any arbitrary name.  I guess one of the fundamental challenges is that I am working with objects that do not have static definitions. 

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

I thought about breaking it down to get that information.  But to be honest, it will take some time and I don't have a need for it at the moment.

1.  Create the object. (ObjectCreate)

2.  Find the exe/ocx/dll/tlib that is defining the object (ObjName(Object, 4))

3.  Use that string path to load the data (_TLB_GetTYPELIBS(ObjeNamePath))

4.  From here you'd have to dissect how trancexx got the function names from within _TLB_GETTYPELIBS, (follow the code)

So as an example (this will be 2 parts instead of 1 because I've not dissected the code myself).

1.  Open an IE browser object:

#include <IE.au3>

Global $goObj = _IECreate("http://google.com/")
_IELoadWait($goObj)

Global $gszObjPath = ObjName($goObj, 4)

ConsoleWrite("When you run trancexx's GUI code, navigate to the below path:" & @CRLF & $gszObjPath & @CRLF)

2. Now run >Trancexx's TYPELib code and navigate to the path that the ConsoleWrite() displayed.

Edited by SmOke_N

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Share this post


Link to post
Share on other sites

I was just going to post the same - but I'm too late ;)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0