List and count variable(s) from autoit script to text(Like Autoit Debugger Variables window)

2 posts in this topic

To everyone,

The following script will help you count variable within autoit script file (.au3) and list them to a text file. The output list is similar to the varible windows in autoit debugger.

Source of inspiration: List All Variable Names In Script

;Author: Jeffrey Paesch

#include <File.au3>
#include <StringConstants.au3>

local $appkey, $lines, $sVarArr[1]

;set and delete registry
$appkey = "hkcu\software\ppsolution.net\variablestrip"

;get source script file
$Source = FileOpenDialog("Choose a script to find Variables in:", @DesktopCommonDir, "Scripts (*.au3)", 3)
If @error Then Exit

;create variable list file
$oFile= StringTrimRight($Source, 4) & "_VarRename.txt"

;Read script file
_FileReadToArray($Source, $lines)

;extracting variables from file to registry
For $i = 1 To UBound($lines, 1) - 1
    If StringLeft($lines[$i], 2) <> ";~" Then
        $words_splits = StringSplit($lines[$i], " ")

        For $words In $words_splits
            $count1 = 1
            $count2 = 1
            $1e_var = ""
            $2e_var = ""

            If StringInStr($words, "$") > 0 Then
                $words = StringMid($words, StringInStr($words, "$"), StringLen($words) + 1)
                $words = StringStripWS($words, $STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES)

                $first_letter = StringRight($words, 1)
                If $first_letter = "," Then $words = StringLeft($words, StringLen($words) - 1)
                If $first_letter = ")" Then $words = StringLeft($words, StringLen($words) - 1)

                If StringInStr($words, "[") And StringRight($words, 1) = "]" Then
                    $pos_brack1 = StringInStr($words, "[")
                    $pos_brack2 = StringInStr($words, "]")
                    $char = $pos_brack2 - $pos_brack1 - 1
                    $1e_var = StringMid($words, 1, $pos_brack1 - 1)
                    $subtext = StringMid($words, $pos_brack1 + 1, $char)
                    If StringInStr($subtext, "$") > 0 Then $2e_var  = $subtext

                If Not StringInStr($words, "[") And StringRight($words, 1) = "]" Then $1e_var = StringLeft($words, StringLen($words) - 1)

                if $1e_var = "" then $1e_var = $words

                if $1e_var = "$""" then exitloop

                If RegRead($appkey, $1e_var) Then
                    $count1 = RegRead($appkey, $1e_var)
                    $count1 += 1
                RegWrite($appkey, $1e_var, "reg_sz", $count1)

                If $2e_var <> "" Then
                    if RegRead($appkey, $2e_var) Then
                        $count2 = RegRead($appkey, $2e_var)
                        $count2 += 1
                    RegWrite($appkey, $2e_var, "reg_sz", $count2)


;count registry
$countreg = 1
while 1
    $sVar = RegEnumVal($appkey, $countreg)
    If @error <> 0 Then ExitLoop
    $countreg += 1

;get registry key and value
for $i = 1 to $countreg
    ReDim $sVarArr [UBound($sVarArr ) + 1]

    $sVar = RegEnumVal($appkey, $i)
    If @error <> 0 Then ExitLoop
     $sVal = RegRead($appkey, $sVar)

     $sVarArr [$i] = $sVar & " (" & $sVal & ")"


;sort Array
_ArraySort ( $sVarArr)

;write variable to text file
for $i = 1 to ubound($sVarArr) - 1
    filewrite ($oFile,  $sVarArr[ $i] & @crlf)
    ;consolewrite ($sVarArr[$i] & @crlf)

;open variable list


You may comment out the last line to print your list directly to a default printer.



Share this post

Link to post
Share on other sites

#2 ·  Posted (edited)

Hmmm, you don't need to the use registry for this. Also this will display as a variable...

MsgBox($MB_SYSTEMMODAL, "", "This is not a $variable")

I have code floating around the forum which does exactly this. It's quicker, correct and doesn't use the registry for keeping the count.

Edited by guinness

_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

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

  • Similar Content

    • Miliardsto
      By Miliardsto
      Hello. Im trying to make my scripts safe - unnable to decompile. I search for obfuscators and other security methods but the search has come to nothing.
      Then one guy gave that idea below. If I rightly understood this idea lets we talk about example program with this secutiy method.
      Program have two parts, first is only login gui and the second part is the main program Second part (main program) is uploaded on ftp server lets say that on http://xxx/autoit/main_program.au3 So we have the first gui with login, we put correctly login and pass and this is the moment when code from http://xxx/autoit/main_program.au3 will be downloaded and executed Finally main program will be appear This is the similiar way like new games are protected by cracking.
      I have few questions in this moment about this:
      Is something like that even possible to do with the autoit? First part of program (login gui) must have somewhere given that link to download the rest of code - http://xxx/autoit/main_program.au3 to make it execute. As we know this first part of program is easy able to hack and retrieve this web url http://xxx/autoit/main_program.au3 where located is main part of program. Is the way to encrypt or secure it? If only code will be stored in .php we know it cannot be previewed. So it could for example get code from .php file instead of .au3 I know that methods works in other languages (I dont know exactly how) thats becouse I only speculates, maybe something may looks different in these solution? Other way would be compiling second part of code on web server (there are available web autoit servers) maybe this way is possible? Tell me anything U know about this ideas and if its even possible to achieve.
      Thanks for ur any response, advice or thoughts

    • dubd83
      By dubd83
      I am trying to click on a tab within an SWT_Window0. The problem is autoit can not see the tab's text and there is no controlid. I have tried using commands to obtain a handle and text with no luck. Any ideas on how to get control of this tab?
    • Iznogoud
      By Iznogoud
      I am trying to find more information on generating PDF files from AutoIT and found the UDF topic 
      Also found some info on creating .FDF file and use PDFTK for merging, but i can't find info about a custom based layout.
      What i trying to find out is, if it is possible to generate a variable layout. For an example i created a script which is based out 20 fields and every field can contain information. If one of those fields are not filled, it shouldn't be printed on the PDF either.
      To make it more difficult, the PDF should contain a heading, the first 10 fields and then a horizontal line across the PDF and then a new heading and then show the last 10 fields.
      But only the fields which are filled.
      Is this possible?
    • PauloRodrigues
      By PauloRodrigues
      I need to select an item from a SAP combobox, could anyone help me or did something like that? I tried to use some AutoIt functions but without success.
      When i try to identify the combobox with au3Info, this is the return:

      Could anyone help me with this challange?
    • ur
      By ur
      Is there anyway to create a new database in Sybase or SAP ASE using AutoIT.