User Feedback

Similar Content

Attached is a UDF for automating Monarch. This was created for my use at work, but I thought I'd share, in case anyone else can use it.
Update: Localized variables and commented out unused variables to be used later.
Update (November 17, 2016): Uploaded newest version, after revisiting and revising error checking. Script-breaking change: Functions start with _Monarch_ now.

Good afternoon AutoIt community!,
I was on Stackoverflow the other day and came across this question: How To Include Files From A Directory. This got me thinking... There has to be a way to do it... After a bunch of research, I wasn't able to find anything. So, I created this UDF to dynamically include every file from the directory. Of course, there are some bugs that I'd like to fix eventually, but for the most part, it works. Simply call the main function (Shown below) right after the rest of the includes before any of your actual code, and the UDF will include all of the au3 files in the specified directory. Without further ado, here is the _includeDir UDF and how to use it!

_includeDir.au3

Download this code (_includeDir.au3 attached as well) and place it into the directory with your current script. Next, include it in your main file. For now, I'm going to be using one called Example.au3.

#Include "_includeDir.au3"
Now, include whatever else you're going to be including in this script, then call the _includeDir function. NOTE: THIS MUST BE CALLED AT THE TOP OF THE SCRIPT, BEFORE ANY CODE IS WRITTEN! THE FUNCTION FORCES THE SCRIPT TO RESTART SO PUTTING IT LATER IN THE SCRIPT WILL RE-RUN THE CODE!

Example.au3
#Include "_includeDir.au3"
#Include <File.au3> ; Not needed. Just here as an example of a normal script.
#Include <Array.au3> ; Not needed. Just here as example of normal script.
_includeDir("Directory to Include")
MsgBox(0,"Example","This is just an example!")
See how the function is called near the top? This is the proper use of the UDF. If you had a folder called "Directory to Include" and had a bunch of .au3 files inside of it, the function would include them all into the Example.au3 script.
If you run the Example.au3 file now, it will most likely tell you "The directory Things to Include does not exist!". Make sure you enter the name of the directory you're trying to include. Just as a side note, when including files, you should put all of the code in the INCLUDED files inside of functions so they aren't automatically run when included. Variables can be outside of the functions so they are automatically set. Remember, if you have a variable in one included file with the same name of variable in another included file, it will be overwritten with whichever include file was included last.

Anyways, if you have pointed the directory to include parameter to a folder that exists and run the Example.au3, it will generate a folder called IncludeDirUDF. It will also write a new line inside of Example.au3. It will write the line
on line one. Of course, you don't always want it to be written to line one, right? Maybe you want this bit of code to be written on line 3 in order to keep your code organize. Is there a way to do this? Absolutely! Simply add the line number as a second parameter to the function. For example, we want to have this bit of code written on line 3, we would set up our Example.au3 file to look like this.
#Include "_includeDir.au3"
#Include <File.au3> ; Not needed. Just here as an example of a normal script.
#Include <Array.au3> ; Not needed. Just here as example of normal script.
_includeDir("Directory to Include", 3)
MsgBox(0,"Example","This is just an example!")
See how we added the 3 to the end of _includeDir? This will tell the function to write the #Include "IncludeDirUDF\loadIncludes.au3" on line 3 of Example.au3. Note, the line HAS TO EXIST in order to be written to it. For example, if your Example.au3 code only has 6 lines, and you specify to be written on line 7, it WILL NOT WORK.

The code is designed to include and restart in order to process the included files. For some reason, if you want to JUST generate the included file and NOT restart, you can add one more parameter to the code. If you don't want the code to restart, simply set your code up to look like this:
#Include "_includeDir.au3"
#Include <File.au3> ; Not needed. Just here as an example of a normal script.
#Include <Array.au3> ; Not needed. Just here as example of normal script.
_includeDir("Directory to Include", 3, False)
MsgBox(0,"Example","This is just an example!")
Note, if you set this last parameter to false, it will simply generate the included file and write to line 3 of Example.au3 (As specified before) and exit before the code reaches the MsgBox() and it will not be displayed.

The last important thing to note: In order to re-include a different set of files, you must delete the #Include "IncludeDirUDF\loadIncludes.au3" from your main script (In this case, Example.au3) and delete the generated file, IncludeDirUDF. Now you can simply rerun Example.au3 and it will include any the dir with any changes you made to it. Only .au3 files should be in the directory you're trying to include as it will not process the other files and will generate an error.

I hope this UDF helps somebody out! Comment any questions/concerns you may have and I will try to address them as soon as possible!

Changelog:
10/04/2016 (v0.4):
_WinGetClassNNList Fixed : Not Returning an Index when using $2D_ARRAY
_WinGetClassNNList Fixed : Not Properly returning $aArray[x][1] on Classes with instances > 9 when using $2D_ARRAY
10/03/2016 (v0.3):
_WinGetClassList Added : Exactly the same as WinGetClassList but returns a more civilized Array
_WinGetClassNNList Added : Returns Classes and their instances in either a 1D or 2D array depending on Flags
_WindowGetHandleList Renamed: _WinGetHandleList SCRIPT BREAKING!
_WindowGetHandleListFromPos Renamed: _WinGetHandleListFromPos SCRIPT BREAKING!
10/01/2016 (v0.2):
WindowsExConstants.au3 Added : Flags in _WindowGetHandleListFromPos
_WindowGetHandleListFromPos Removed: ConsoleWrite left in during debug
_WindowGetHandleListFromPos Added : Flag for if part of a Control is at $X, $Y return it as well.
10/01/2016 (v0.1):
_WindowGetHandleList Added : Retrieves the handles of classes from a window.
_WindowGetHandleListFromPos Added : Retrieves the handles of classes at a specific position from a window.
Known and Reported Bugs:
None reported
To Do:
To Be Decided. Opinions welcome!
Upcoming Changes:
To Be Decided.