<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.autoitscript.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mlazovjp</id>
	<title>AutoIt Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.autoitscript.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mlazovjp"/>
	<link rel="alternate" type="text/html" href="https://www.autoitscript.com/wiki/Special:Contributions/Mlazovjp"/>
	<updated>2026-05-14T18:18:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=User_Defined_Functions&amp;diff=14114</id>
		<title>User Defined Functions</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=User_Defined_Functions&amp;diff=14114"/>
		<updated>2019-10-21T02:41:11Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Misc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a listing of libraries of &#039;&#039;&#039;user defined functions&#039;&#039;&#039; (UDF). These libraries have been written to allow easy integration into your own scripts and are a very valuable resource for any programmer.&amp;lt;br /&amp;gt;&lt;br /&gt;
This list is probably not complete (333 UDFs on 2019/09/29), but constantly supplemented.&lt;br /&gt;
If you do not find a solution here, ask a new question on the [https://www.autoitscript.com/forum/forum/2-general-help-and-support/ forum].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
The listed UDFs might have been written for older versions of AutoIt. So there is no guarantee that every UDF works smoothly with newer versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
None of the UDFs has been tested by the maintainers of this list so you as a user need to make sure that they deliver the expected results.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Latest modifications&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Date !! section !! creator !! title&lt;br /&gt;
|-&lt;br /&gt;
| 2019-09-29 || Inter Process Communications || tarretarretarre || Autoit-Socket-IO - Networking in AutoIt made simple!.&lt;br /&gt;
|-&lt;br /&gt;
| 2019-09-03 || Windows || water || TaskScheduler - Brushed up Task Scheduler UDF.&lt;br /&gt;
|-&lt;br /&gt;
| 2019-05-17 || GUI additions || S3cret91 || Notify - Display permanent desktop notifications.&lt;br /&gt;
|-&lt;br /&gt;
| 2019-05-17 || Script Coding/Analyzing/Debugging || user4157124 || AutoIt error logger (AUERLO) - File- and stdout (etc.) output of messages, regular- and COM Object errors, exit method and -code, etc.&lt;br /&gt;
|-&lt;br /&gt;
| 2019-05-10 || GUI additions || NHD || Wi3SMenu - Create a slide menu with Windows 10 style. Supports color, icon and opacity.&lt;br /&gt;
|-&lt;br /&gt;
| 2019-05-08 || Hardware || RTFC || BuildPartitionTable - Scans a physical drive&#039;s partition table and returns a partition_table, allocation_table and volumes_table.&lt;br /&gt;
|-&lt;br /&gt;
| 2019-05-05 || All sections || water || Changed all links from http to https&lt;br /&gt;
|-&lt;br /&gt;
| 2019-04-01 || Multiple sections || Ward || Seems Ward left the forum and has removed all UDFs he created :-(&lt;br /&gt;
|-&lt;br /&gt;
| 2019-03-28 || Files, Databases and web connections || TheXman || jq - A powerful and flexible JSON processor based on jq&lt;br /&gt;
|-&lt;br /&gt;
| 2019-03-14 || Script Coding/Analyzing/Debugging || Yashied || Log UDF - Allows to create text log files&lt;br /&gt;
|-&lt;br /&gt;
| 2019-02-25 || Files, Databases and web connections || seangriffin || CSV - Manipulate CSV files&lt;br /&gt;
|-&lt;br /&gt;
| 2019-02-22 || GUI additions || Taskms4 || MTSkin - Simply create modern looking GUIs (borderless GUI, Interactive menu panel (with mouse-over detection), a bunch of skins)&lt;br /&gt;
|-&lt;br /&gt;
| 2019-01-27 || Microsoft Office || water || Outlook Tools - Import/export contacts from/to vcf files and calendar events from/to ics files&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automation ==&lt;br /&gt;
&lt;br /&gt;
===Browsers===&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=154439 Chrome (by seangriffin)] - Automate the most common tasks in Chrome with this UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=95595 Firefox (by Stilgar)] - A little less support for automation than IE, but still very good.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=167661 Firefox (by Danp2)] - Modified newer version of Stilgar Firefox UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/files/file/224-firefox-profile-backup/ FireFox Profile Backup 1.0 (by careca)] - Backup or restore your firefox profile. The application searches for the profile in home drive that will be the one to backup.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=124330 _FF_AutoLogin (by Stilgar)] - This is a auto-login function and login-function-generator for FireFox and the FF.au3.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=92035 _FF_DM (by Stilgar)] - UDF to control the FireFox Download-Manager (not the download-window).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=91650 _FF_FoxBox (by Stilgar)] - UDF to control Fox!Box (A Mozilla Firefox extension for the AVM FRITZ!Box) with FF.au3.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=91665 _FF_Screengrab (by Stilgar)] - UDF to control Screengrab! (FireFox-AddOn) with FF.au3.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=124330 _HTML (by Stilgar)] - Get informations from any HTML (XML) source, without any browser.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=166542 HTMLDocumentEvents (by SmOke_N)] - Track IE document events.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=167035 IEEx (by SmOke_N)] - IE extended library with some Javascript options.&lt;br /&gt;
* Internet Explorer (by DaleHohm et al.) - IE library that is now supplied with a standard AutoIt install.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=153520 IUIAutomation MS framework (by junkew)] - IUIAutomation MS framework to automate chrome, FF, IE etc.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=149203 NavInfo (by Nessie)] - With this UDF you can check if a specified browser/software is installed and which version is being used.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=61090 Opera (by MrCreatoR,)] - Automate the most common tasks in Opera with this UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=191990 WebDriver (by Danp2)] - W3C compliant Webriver UDF.&lt;br /&gt;
&lt;br /&gt;
===Microsoft Office===&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=32144 Microsoft Office Access (by randallc)] - Automate Microsoft Access.&lt;br /&gt;
* Microsoft Office Excel (by water et al.) - This UDF is included in AutoIt. Link to the [[Excel_UDF|documentation]] pages.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=135312 Microsoft Office Excel Charts (by water, GreenCan)] - Creating charts using Microsoft Excel.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=126305 Microsoft Office Outlook (by water)] - Automate Microsoft Outlook. Link to the [[OutlookEX_UDF_-_General|documentation]] pages.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=480 Outlook Tools (by water)] - Built on top of the OutlookEX UDF it offers some often needed extended functionality (import/export ics/vcf files etc.). Link to the [[OutlookTools|documentation]] pages.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=50254 Microsoft Office PowerPoint (by Toady)] - Automate Microsoft PowerPoint.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=178783 Microsoft Office PowerPoint (by water)] - Automate Microsoft PowerPoint.&lt;br /&gt;
* Microsoft Office Word (by water et al.) - This UDF is included in AutoIt. Link to the [[Word_UDF|documentation]] pages.&lt;br /&gt;
&lt;br /&gt;
===OpenOffice/LibreOffice===&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=151530 OOo/LibO Calc (by GMK)] - OpenOfficeCalc UDF (works also for Libre Office).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=185932 OpenOffice/LibreOffice Spell Checker (by GMK)] - Function to validate words, and show spell alternatives.&lt;br /&gt;
&lt;br /&gt;
===Other Applications===&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=106163 Active Directory (by water)] - Extensive library to control and manipulate the Windows active directory. Link to the [[Active_Directory_UDF_-_General|documentation]] pages.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=87956 Java (by seangriffin)] - Creates an access bridge between your application and a Java application. Allowing you to automate some Java applications.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=86574 SAP (by seangriffin)] - SAP business management automation.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=149540 SAPWizard (by ozmike)] - SAPWizard UDF.&lt;br /&gt;
&lt;br /&gt;
== Script Coding/Analyzing/Debugging ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=198929 AutoIt error logger (AUERLO) (by user4157124)] - File- and stdout (etc.) output of messages, regular- and COM Object errors, exit method and -code, etc.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=454 cDebug (by c.haslam)] - Dumps the values of all AutoIt subtypes and expressions including nested arrays, DLL structs and maps.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=195882 ErrorLog (by mLipok)] - Logs program activities and errors to different output locations.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=156196 Log4a (by zorphnog)] - Logging library loosely based upon the log4j and NLog libaries.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=195862 Loga (by Danyfirex)] - Simple logging library to keep track of code with an integrated console.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=119032 Log UDF (by Yashied)] - This simple UDF allows you to create a text log files.&lt;br /&gt;
&lt;br /&gt;
=== Inter Process Communications ===&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=188991 Autoit-Socket-IO (by tarretarretarre)] - Autoit-Socket-IO is a event driven TCP/IP wrapper heavily inspired from Socket.IO with focus on user friendliness and long term sustainability.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=126936 Container (by MrCreatoR)] - Scripts interaction method. Allows to transfer whole arrays as data, and even COM objects.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=55994 DDEML (by doudou)] - Use your AutoIt script as DDE client or server.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=193277 FMIPC (by argumentum)] - IPC via FileMapping.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=127615 Interprocess (by JScript)] - Remotely execute a function in another script (using Mailslot).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=193158 IPC_IO (by JohnWIlling)] - IPC library supporting multiple connection types (such as: Named Pipe, File, TCP, SharedMemory, MailSlot).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=106710 Mailslot (by trancexx)] - IPC using Mailslots.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=169797 Pool - Post Office for Organised Labour (by RTFC)] - Provides multiple AutoIt processes with an infrastructure for exchanging messages, data, and remote-control instructions.&lt;br /&gt;
&lt;br /&gt;
== Files, Databases and web connections ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=180850 ADO (by mLipok)] - A modifed version of the _SQL UDF to access all kind of databases (MSSQL, MySQL, PostgreSQL, SQLite, MS ACCESS, XLS, TXT, and many other which use ADO and ODBC).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=105875 ADODB (by spudw2k)] - ADODB Example.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=176895 AXML (by Aipion)] - This is a Wrapper for Pugixml, made with C++.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=145142 DBF (by funkey)] - dBase database read and write with DLL.&lt;br /&gt;
* [https://www.autoitscript.com/forum/topic/114406-csv-file-to-multidimensional-array/?do=findComment&amp;amp;comment=799820 CSV (by ProgAndy)] - Read/write CSV files to/from 2D arrays.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=197909 CSV (by seangriffin)] - Manipulate CSV files using SQLite.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=119238 Excel file generation UDF (by jerome)] - Excel file generation (multi-sheet workbook) without the need to have Excel installed.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=143866 Excel XML UDF (by FireFox)] - UDF to work with SpreadsheetML (Open XML file formats).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=155905 EXml (by jdelaney)] - Create Excel file (SpreadsheetML) through &amp;quot;Microsoft.XMLDOM&amp;quot;.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=116072 EzMySql (by Yoriz)] - EzMySql - Use MySQL Databases with AutoIt.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=94920 FireBird (by eltorro)] - FireBird, Interbase DLL UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=104150 JSON (by Gabriel13)] - RFC4627 compliant JSON encode/decode.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=148114 JSON (by Ward)] - JSMN - A Non-Strict JSON UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=156794 JSON (by ozmike)] - Bridge to Native Windows JSON plus OO extension for AutoIt.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=173797 JSONgen: JSON generator (by Jefrey)] - UDF to generate JSON.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=197421 jq (by TheXman)] - A powerful and flexible JSON processor based on jq.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=127101 MS SQL (by TheLuBu)] - MSSQL.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=51952 MS SQL (by ChrisL)] - _SQL. ADODB Connection.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=20814 MySQL (by cdkid)] - MySQL relational database management system UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=85617 MySQL (by ProgAndy)] - MySQL UDFs (without ODBC - working with libmysql.dll).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=122360 MySQL (by James)] - MySQL ODBC Connector.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=187223 romaSQL (rynow)] - This autoIt UDF is built on the concept of Laravel Query &amp;amp; doctrine. Connection string is based on ADODB / ODBC.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=143331 Sharepoint 2007/2010 UDF (by schoppet)] - UDF to access the SOAP-Webservices of Sharepoint 2007/2010.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=17099 SQLite (by ptrex)] - SQLite is a library that implements a self-contained, embeddable, zero-configuration SQL database engine.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=142977 SQLite Array Functions (by SmOke_N)] - SQLite Array Functions - a faster method for unique arrays and sorting methods.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=140521 SQLite - Database UDF (by PhoenixXL)] - UDF for SQLite so that beginners will also be able to do the stuff.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=157853 SQLiteEx UDF (by 57ar7up)] - SQLiteEx UDF v0.5.1 - Simplest work with SQLite.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=163633 Xbase I/O UDF (by RTFC)] - Transfer data between Xbase Data file (*.dbf) and AutoIt array written in pure AutoIt (no SQL, no ADO, no dlls, no external dependencies).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=19848 XML DOM Wrapper (by eltorro)] - Supports CRUD operations on XML. Including XSL and XPath.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=176895 XML (by mLipok)] - New version of XML DOM Wrapper, with many new features.&lt;br /&gt;
&lt;br /&gt;
== Data compression ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=121985 AutoIt Machine Code Algorithm Collection (by Ward)] - &amp;lt;s&amp;gt;Checksum, Compression, Encode and hash algorithm collection for 32 and 64 bit.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=85094 7z, zip, gzip, bzip2, tar (by rasim)] - Extensive library that uses a external DLL that must be provided with the script.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=92958 gZip (by Zinthose)] - Based on the parsing of gZip.exe output. It can work with memory, it doesn&#039;t work with files. &lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=87441 LZMA (by trancexx)] - LZMA (Native Windows).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=112273 LZMA Compression (by Ward)] - &amp;lt;s&amp;gt;LZMA Compression UDF.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=166634 MessagePack (by Ward)] - &amp;lt;s&amp;gt;Efficient binary serialization format to exchange data among multiple languages like JSON - but faster and smaller.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=138838 Package (by Yashied)] - Package UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=129529 pZip (by asdf8)] - PureZIP_L library UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=76176 UnRAR (by rasim)] - UnRAR.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=17727 XZip (by eltorro)] - Another UDF for &amp;quot;XStandard XZIP Component&amp;quot;.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=161847 XZip (by mLipok)] - UDF for &amp;quot;XStandard XZIP Component&amp;quot;.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=44524 Zip plugin (by eltorro)] - Zip plugin.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=73425 ZIP (by torels)] - ZIP UDF in pure AutoIt.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=116565 zip (by wraithdu)] - Create ZIP files and unpack ZIP files.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=135565 ZIP (by joakim)] - ZIP STRUCTS UDF (from scratch).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=128962 zLib (by Ward)] - &amp;lt;s&amp;gt;zLib (Deflate/Inflate/GZIP) UDF.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=87284 ZLib (by monoceres)] - Based on ZLib.dll. It can compress/uncompress data in memory, it doesn&#039;t work with files.&lt;br /&gt;
&lt;br /&gt;
== Encryption and hash ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=78745 AES Rijndael (by Ward)] - &amp;lt;s&amp;gt;Very fast AES UDF. Supports ECB/CBC/CFB/OFB block cipher mode.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=121985 AutoIt Machine Code Algorithm Collection (by Ward)] - &amp;lt;s&amp;gt;Checksum, Compression, Encode and hash algorithm collection for 32 and 64 bit.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=81332 _Base64Encode, _Base64Decode (by trancexx)] - Fast _Base64Encode, _Base64Decode (calling functions &amp;quot;CryptBinaryToString&amp;quot; and &amp;quot;CryptStringToBinary&amp;quot; in Crypt32.dll).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=153246 Base91 and Base128 (by Beege)] - Base91 and Base128 functions.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=76976 MD5,SHA1,CRC32,RC4,BASE64,XXTEA (by Ward)] - &amp;lt;s&amp;gt;Several encryption and hash functions.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=107784 TrueCrypt (by FuryCell)] - TrueCrypt UDFs.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=140737 WinTrust (by kasty)] - verify the integrity of a file with its embedded signature or a given catalog.&lt;br /&gt;
&lt;br /&gt;
== GUI Additions ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=97241 3D Pie chart (by WideBoyDixon)] - 3D Pie chart.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=173924 Chart_UDF (by Kanashius)] - This UDF can be used to Display bar charts in a window.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=96258 ContextHelp (by Yashied)] - Management of context help ([https://www.autoitscript.com/forum/index.php?showtopic=72152-contexthelp/ original]).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=109096 ExtMsgBox (by Melba23)] - A very customisable replacement for MsgBox.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=105582 GUICtrlOnChangeRegister (by Mat)] - Call a function when an edits content is changed.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=145149 GUIExtender (by Melba23)] - Expand and contract sections of your GUI ([https://www.autoitscript.com/forum/index.php?showtopic=117909 original]).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=119505 GUIFrame (by Melba23 &amp;amp; Kip)] - Divide a GUI into adjustable frames.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=144207 GUI Panel (by FireFox)] - Manage child GUIs as panel ctrls.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=113723 GUI Scrollbars (by Melba23)] - Automatically sized scrollbars with a single command.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=161184 MetroGUI (by BBs19)] - Windows 10 style buttons, toggles, radios etc.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=20967 Modern tray menu (by Holger)] - Allows the creation of modern, fancy GUI and tray menus with icons and colors.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=194693 MTSkin (by Taskms4)] - Simply create modern looking GUIs (borderless GUI, Interactive menu panel (with mouse-over detection), a bunch of skins).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=182136 Notifications (by S3cret91)] - Display permanent desktop notifications.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=136149 Notify (by Melba23)] - Small notifications on the edge of the display.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=161750 Pie chart (by Andreik)] - Pie chart.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=75429 Real Vista Aero Glass (by James)] - Real Vista Aero Glass UDF - you can apply glass effect to your GUI.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=71811 SetOnEvent (by martin)] - Provides an easy way for an event to call functions with parameters.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=103871 _SysTray (by wraithdu)] - Get info about and manipulate Systray icons.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=108445 Toast (by Melba23)] - Small message GUIs which pop out of the Systray.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=110003 Tray Icon Bar Graph (by BeeGee)] - Creates a scrolling bar graph as the tray icon.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=132864 Uskin (by JScript)] - A library that allows a user to skin their application GUI using the Windows &#039;&#039;.MSstyles&#039;&#039; files.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=191821 Wi3SMenu (by NHD)] - Create a slide menu with Windows 10 style. Supports color, icon and opacity.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=32494 XSkin (by Valuater)] - A large library that allows skinning of your GUI and to apply custom skins.&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=146406 Calendar (by jmon)] - Calendar UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=125293 ChooseFileFolder (byMelba23)] - Single and multiple selections from specified path treeview listing.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=96464 Colorpicker (by Yashied)] - Create a button for the user to select a color.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=123409 Explorer Frame UDF (by Beege)] - Takes any frame created by GUIFrame and turns it into a MS-Windows like Explorer window.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=173929 GDIPlus Slider UDF (by Kanashius)] - This UDF can be used to create a slider with an imagebackground and an image to move.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=79412 Graph control (by andybiochem)] - Easily create and show bar chart and line charts.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=104399 GraphGDIPlus UDF (by andybiochem)] - Easily create and show bar chart and line charts with GDI+ to take advantage of double-buffering.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=105682 GUICtrlCreateFinder (by Mat)] - Allows you to create a window finder control like the one seen in AutoIt Window Info.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=107965 GUIHotkey (by Mat)] - UDF for using native hotkey controls.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=182492 GUIListViewEx (by Melba23)] - Insert, delete, move, drag, sort, edit and colour ListView items.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=111438 GUIPager (by Mat)] - Create and control native pager controls.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=20967 GUI/Tray Menu (by Holger, LarsJ, AZJIO)] - GUI/Tray Menu with icons and colors.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=166594 GUITreeViewEx (by Melba23)] - Check/clear parent and child checkboxes in a TreeView.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=90598 Hotkey input control (by Yashied)] - Hotkeys Input Control UDF Library (Non-native).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=173932 ListView Edit UDF (by Kanashius)] - This UDF can be used to simply edit an Listview.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=109355 ListView - Explorer like ListView UDF (by Beege)] - This UDF simplify creating MS Explorer-like ListViews.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=143711 Marquee (by Melba23)] - Make tickertape info bars.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=143380 Predict Text UDF (by PhoenixXL)] - It sub classes the edit control and matches the current word through the Database &amp;amp; sets selection in accordance.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=74649 Progressbar with GDIplus (by ProgAndy)] - You even can use full textured images.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=151636 RestrictEdit_SRE UDF (by PhoenixXL)] - Restrict the text that can be entered in an editbox through a String Regular Expression.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=128242 Ribbon (by trancexx)] - UDF for Windows Ribbon framework.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=114034 StringSize (by Melba23)] - Automatically size controls to fit the text you want to put in them.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=126958 Syslink (by Yashied)] - Provides a convenient way to embed hypertext links in a window.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=105814 Table (by andybiochem)] - Table UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=125251 TVExplorer (by Yashied)] - Allows to create TreeView (TV) Explorer controls that display a tree of files and folders.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=190659 Virtual Listview (by LarsJ)] - Virtual Listview for large amounts of data with a large number of rows.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=195053 Windows Message Monitor (by LarsJ)] - Monitor Windows Messages of a window or control.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=118317 Battery UDF (by Yashied)] - Retrieves a various information and current status of the battery(s).&lt;br /&gt;
* [https://www.autoitscript.com/forum/topic/154727-buildpartitiontable BuildPartitionTable (by RTFC)] - Scans a physical drive&#039;s partition table and returns a partition_table, allocation_table and volumes_table.&lt;br /&gt;
* [https://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI (by therealhanuta)] - Serial and parallel communication (COM port, RS-232, LPT port) - without installing DLL&#039;s (using Windows API calls).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=77731 Device Management (by weaponx)] - Device Management API.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=97487 DirectShow (by monoceres)] - DirectShow UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=164700 DirectSound (by eukalyptus)] - DirectSound UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=164701 Direct2D (by eukalyptus)] - Direct2D UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=99713 Drive Info (by NerdFencer)] - Gathers drive info for Hard Drives, Disk Drives, and Floppy Drives.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=138989 FritzBox (by Allow2010)] - _FB_Tools - manage your FritzBox from Autoit.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=121084 I/O Port Functions (by Ascend4nt)] - Input/Output UDF for interacting with ports (x64 Parallel Port, Keyboard etc.).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=154350 Monitor Configuration (by jaberwacky)] - Monitor Configuration UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=155469 Mouse (by AlmarM)] - AutoIt powered mouse events.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=147325 MouseTrapEvent (by ozmike)] - MouseTrapEvent UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=149083 NetInfo (by Nessie)] - UDF for test internet download speed and upload speed.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=155539 Network configuration (by jguinch)] - Network configuration UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=182684 Nitgen (by Jefrey)] - UDF to work with Nitgen fingerprint readers that use NGenBio SDK.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=155485 Printers management with WMI (by jguinch)] - Allows to manage printers: add/delete printer, driver, port, or obtain configuration, set default printer ...&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=128546 Serial Port/COM (by martin)] - Serial Port /COM Port UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=27755 SMARTDRIVE (by ptrex)] - SMART drive Analysis.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=158640 SPI Hardware Interface (by Blinky)] - Communicate with the MAX335 chip using the SPI protocol via the LPT (printer) port.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=8188 VISA/GPIB (by Angel)] - VISA/GPIB library.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=68866 Webcam (by LIMITER)] - Webcam UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=70857 Webcam (by ludocus)] - Webcam UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=91018 WiFi (by MattyD)] - Low level control over your wireless LAN.&lt;br /&gt;
&lt;br /&gt;
== Information gathering ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=29404 Computer information (by JSThePatriot)] - A general purpose library to get various details about a Windows machine.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=54039 WinPcap (by JRSmile)] - Wrapper for the windows packet capture library WinPcap.&lt;br /&gt;
* [https://opensource.grisambre.net/pcapau3/ WinPcap (by Nicolas Ricquemaque)] - A library to access the main functionalities offered by the WinPcap driver.&lt;br /&gt;
&lt;br /&gt;
== Internet protocol suite ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/topic/178871-dllcall-with-c-example/#comment-1285754 SMSApi (by mLipok)] - UDF for SMSAPi which provides SMS services.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=178589 BulkSMS (by Skysnake)] - UDF for BulkSMS which provides SMS services.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=137456 cURL (by seangriffin)] - A UDF for transferring data with URL syntax.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=173067 cURL (by Ward)] - &amp;lt;s&amp;gt;AutoIt binary code version of libcurl with SSL support.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=187718 HTTP lib (by Jefrey)] - HTTP lib (GET, POST and upload) UDF to simplify HTTP requests, mainly when dealing about POST data or file uploads.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=40243 IMAP (by mikeytown2)] - IMAP.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=108422 IMAP4 (by Tipulatoid)] - IMAP4 UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=43515 IRC (by McGod)] - A lightweight library for communicating with IRC servers.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=159285 IRC (by rcmaehl)] - IRC UDF - Updated Version of Chips&#039; IRC UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=22838 POP3 (by Apzo)] - POP3 library for retrieving email messages. Not compatible with Gmail because it uses SSL.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=167339 POP3 (by mLipok)] - POP3 UDF According to the 1939 RFC, modified version with Quoted Printable decoder.&lt;br /&gt;
* &amp;lt;strike&amp;gt;[https://www.autoitscript.com/forum/index.php?showtopic=64051 POP3 SSL (by Fox2)] - A POP3 library that&#039;s compatible with Gmail. It uses an external executable that must be supplied with your script.&amp;lt;/strike&amp;gt; No code attached to the thread.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=154530 Prowl (by mrflibblehat)] - Push notifications to iPhone, iPod touch or iPad using Prowl (Growl client for iOS).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=173129 Request (by Ward)] - &amp;lt;s&amp;gt;Powerful and easy-to-use HTTP client for AutoIt based on Curl.au3 and Json.au3.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=138095 SFTP (by Lupo73)] - UDF to support SFTP protocol using PSFTP.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=154054 Socket UDF (by funkey)] - Socket UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=23860 SMTP (by Jos)] - Smtp Mailer That Supports Html And Attachments.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=167292 SMTP Mailer UDF (by mLipok)] - Smtp Mailer That Supports Html And Attachments - Modified Version with support to save EML files.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=81687 SNMP (by enaiman)] - SNMP_UDF for SNMPv1 and SNMPv2c.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=70759 SNMP - MIB protocol (by ptrex)] - Reading toner status from SNMP device with WMI.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=166579 SSH (by jeanphile)] - Use the SSH protocol very easily in your code.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=185329 STUN (by j0kky)] - STUN is a protocol that permits you to know your external IP but, more interesting, your external port associated to your internal port.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=184817 SyslogSend (by Irios)] - This allows sending (BSD) messages to a syslog server using UDP.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=169774 TCPServer (by Jefrey)] - Multi client, event-based, able to bind console app to socket.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=57022 UPnP Protocol (by ptrex)] - UPnP - Read and Control your devices in side out.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=84133 WinHTTP (by trancexx)] - Access the HTTP protocol for creating GET and POST requests and submitting them with conforming standards, cookies not supported.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=77503 WinInet (by -Ultima-)] - Access standard Internet protocols (FTP, Gopher and HTTP). Supports GET/POST requests and cookies.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=191954 WSA_NBTCP (by ripdad)] - Non-Blocking Transmission Control Protocol.&lt;br /&gt;
&lt;br /&gt;
== Maths ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=170658 Advanced Math UDF (by scintilla4evr)] - Advanced mathematical functions (primes, number sequences, interpolate, calculate values of functions like Riemann zeta etc.).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=102686 Advanced rounding (by Mat)] - Support for different measures of accuracy and 8 ways to resolve tie breaks.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=83529 Big number (by eukalyptus)] - Make calculations with extremely large numbers that AutoIt normally is not able to support.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=106551 Decimal To fraction (by Malkey)] - Converts any decimal number to a fraction. Example: 1.2 to 6/5.&lt;br /&gt;
* [https://www.autoitscript.com/forum/files/file/319-eigen4autoit/ Eigen4AutoIt (by RFTC)] - This library allows you to perform fast matrix operations on large numerical data sets, and much more ....&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=140789 MathsEx UDF (by PhoenixXL)] - Functions for Carrying Out More Advanced Mathematical Calculations.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=81189 Number base conversion (by james3mg)] - From, to and between positive bases less than 63 (decimals supported).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=117156 NumToWord (by Mat)] - Convert numerals to a human readable string.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=108803 Polynomials (by Mat)] - Functions for using polynomials.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=83091 Primes (by jennico)] - Many functions dealing with prime number generation and calculations.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=94770 Roman Numerals (by AZJIO)] - Roman Numerals.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=98160 Root function (by Mat)] - Working out real roots of numbers.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=163899 StringAPL (by minx)] - inline APL interpreter.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=82722 Trigonometric and math functions (by trancexx)] - _ATan2(), _Cosh(), _Frexp(), _Hypot(), _Ldexp(), _Logb(), _Sinh(), _Tanh().&lt;br /&gt;
&lt;br /&gt;
== Media ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=95357 FreeImage library (by ProgAndy)] - Various operations on images, such as rotate, resize, flip.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=127263 HtmlHelp (by Geodetic)] - HtmlHelp UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=116009 HyperCam (by seangriffin)] - HyperCam (Screen Recording) UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=182535 HyCam2 (by willichan)] - Automation for HyCam2 screen recording utility.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=50608 OCR (by ptrex)] - Real OCR in AU3 - MODI with MS Office 2003.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=89542 OCR (by seangriffin)] - Tesseract (Screen OCR) UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=51054 Printer controller (by martin)] - Print text in any font, size and colour at any position on the page, draw lines, curves, elipses, pies in any colour, and print images.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=73993 Printing (by GRS)] - Printing from AutoIt.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=161831 RTF_Printer (by mLipok)] - Printing RichEdit in the background.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=94834 Simple DirectMedia Layer (by AdmiralClaws)] - Adds support for joysticks, CDs, 2D graphics, timers. See [https://www.libsdl.org/ SDL website] for more information.&lt;br /&gt;
&lt;br /&gt;
===Graphics and image===&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=113881 au3Irrlicht2 (by JRowe)] - Combining Irrlicht and AutoIt.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=130263 AVI writing udf (by monoceres)] -  UDF for creating uncompressed avi:s from bitmap files (support for compressing the video, may or may not appear).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=27362 Bitmap Library (by evilertoaster)] - Bitmap Library.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=150231 GTK+  (by prazetto)] - GTK+ Framework | Widgets.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=13096 ImageGetInfo (by Lazycat)] - This is an UDF for reading info from JPEG, TIFF, BMP, PNG and GIF - size, color depth, resolution.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=70506 IrrLicht (by A. Percy)] - A 3D graphics engine suitable for creating games.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=151011 OpenGL (by LarsJ)] - OpenGL without external libraries etc. For JPEG files UDF also retreive various Exif information.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=148129 OpenGL (2.0) (by minx)] - New set of UDFs for OpenGL + AutoIt.&lt;br /&gt;
&lt;br /&gt;
===Players===&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=114143 VLC (by seangriffin)] - VLC (Media Player) UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=91316 VLC Media Player (by ptrex)] - VLC Media Player.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=27352 WMP (by ConsultingJoe)] - Windows Media Player UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=44008 WMP - Media Controls (by CFire)] - Another Windows Media Player UDF.&lt;br /&gt;
&lt;br /&gt;
===Sound===&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=83481 BASS Function Library (by BrettF)] - Sound and Music via wrappers for Bass, BassEnc, Bass FX, BassSFX, BassAsio and BassCd DLLs.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=173808 libZPlay (by Danyfirex)] - Multimedia library for playing mp3, mp2, mp1, ogg, flac, ac3, aac, oga, wav and pcm files and streams.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=37072 MIDI (by eynstyne)] - MIDI UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=114742 SAPIListBox (by seangriffin)] - SAPIListBox (Speech Recognition) UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=100439 TTS (by Beege)] - Text-to-Speech UDF.&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=162195 Acrobat Reader - ActiveX Viewer (by mLipok)] - Make your own PDF Viewer GUI with Acrobat Reader ActiveX COM Object &amp;quot;AcroPDF.PDF.1&amp;quot;.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=164469 Debenu PDF Viewer SDK (by mLipok)] - A collection of functions to display PDF files in your applications using Debenu PDF Viewer SDK.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=160875 Debenu Quick PDF Library (by mLipok)] - A collection of functions for Debenu Quick PDF Library.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=75832 FoxIt Reader (by ptrex)] - PDF Reader in AU3.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=118827 MPDF (by taietel)] - Create PDF from your application.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=42776 PDFCreator (by ptrex)] - Automation of PDFCreator allows you to create and manipulate PDF files.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=170550 PDFCreator (by mLipok)] - UDF for PDFCreator v1.x.x with working EVENTs Handler.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=32261 _StringToPDF (by Tam0r)] - Write a string to a PDF file and specify font size, type etc.&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=150819 VirusTotal (by Danyfirex)] - VirusTotal API 2.0 UDF.&lt;br /&gt;
&lt;br /&gt;
== Social Media and other Website API ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=159254 Cex.io (by AquilesCrespo)] - UDF script for using with the web api from https://cex.io/ server.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=169333 CrowdinAPI (by mLipok)] - Uses the [https://crowdin.com/page/api crowdin.net website API] for some functions (create projects, add and update files, download translations or integrate localization).&lt;br /&gt;
* [https://www.autoitscript.com/forum/files/file/290-dropbox-authenticator/ Dropbox authenticator (by Gimerly)] - Dropbox authenticator.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=158106 Easypost (by dcat127)] - Print USPS Postage Labels.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=114801 eBay (by seangriffin)] - eBay UDF (functions GetItemStatus and GetSingleItem from the &amp;quot;Shopping API&amp;quot;).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=141340 Gmail (by PhoenixXL)] - Remote Gmail (UDF).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=192422 Gmail API (by Ascer)] - Automate communication with Gmail using oAuth 2.0 security. &lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=98504 Google Functions (by Beege)] - Google Functions (Suggestions, Definitions, Translate, Convert).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=115437 Google Maps (by seangriffin)] - Google Maps UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=70675 iTunes (by torels)] - iTunes UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=101802 iTunes (by Beege)] - Another iTunes UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=150985 No-IP (by Nessie)] - With this UDF you can simply update your no-ip hostname(s) and retrieve the ip address of an no-ip address.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=150838 PasteBin (by mrflibblehat)] - Pastebin UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=121767 Skype (by FireFox)] - Skype4COM provides an ActiveX interface to the Skype API.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=113234 Teamspeak 3 (by chipDE)] - Teamspeak 3 UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=186944 TeamViewer API (by mLipok)] - A collection of function for use with TeamViewer API.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=186381 Telegram Bot UDF (by LinkOut)] - UDF for [https://core.telegram.org/api Telegram messenger API].&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=166547 TVmaze.com API (by BBs19)] - TVmaze.com API UDF (TV-Series).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=116600 Twitter (by seangriffin)] - Twitter UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=149247 Yahoo Weather (by Nessie)] - YWeather UDF - Yahoo Weather API.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=112775 Youtube Uploader (by BrettF)] - AYTU - AutoIt Youtube Uploader.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=50880 ACL (by ptrex)] - Set ACL on windows Objects.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=134508 ACL (by FredAl)] - Do most everything with the DACL and ownership on all types of objects: Files or folders, Registry keys, services, Kernel and WMI objects, etc.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=184937 CertUtil UDF (by mLipok)] - Wrapper for windows certutil.exe (command-line program that is installed in Windows as part of Certificate Services).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=113560 FileSystemMonitor (by seangriffin)] - Monitors the file system by recording all file system events occurring within a given path.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=145158 Firewall (by JLogan3o13)] - Control and manipulate the Windows Firewall (enable/disable, Exclusions list, enable/disable ports etc.).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=194015 Firewall policy2 (by Bilgus)]- Provides access to the firewall policy for Windows Vista+.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=111018 ITaskBarList (by Beege)] - ITaskBarList UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=74118 Local account (by engine)] - Local account UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=161193 Magnifier Functions (by Ascend4nt)] - Exposes most of the useful Magnifier API functions available since Windows Vista.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=75250 Registry (by engine)] - Windows Registry UDFs.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=50551 Registry (by seanhart)] - RegWriteAllUsers / RegDeleteAllUsers.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=80201 Service (by arcker)] - Build your own service with AutoIt code.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=124508 Startup (by guinness)] - Create Startup entries in the Startup Folder or Registry.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=164756 SCCM (by JLogan3o13)] - Systems Center Configuration Manager Library.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=134628 System restore (by FredAI)] - System restore UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=186111 SubstWrapper UDF (by mLipok)] - Wrapper for windows subst.exe command - (Associates a path with a drive letter).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=135994 Taskplanner/Taskscheduler COM (by Allow2010)] - an UDF for using the Windows Taskplaner / Task Scheduler.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=83355 Task Scheduler (by dbzfanatic)] - Task Scheduler UDF.&lt;br /&gt;
&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=200068 TaskScheduler (by water)] - Brushed up Task Scheduler UDF.&lt;br /&gt;
&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=173934 TTS UDF (by Kanashius)] - UDF for use with SAPI Automation Object - text-to-speech (TTS) engine.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=158377 UAC (by AdamUL)] - User Account Control (UAC) UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=175719 Utter (by Surya)] - Utilizing more of SAPI (Speech Recognition UDF).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=127075 WIMGAPI (by Homes32)] - A UDF for manipulating Windows Image Files (.wim) without ImageX.exe.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=28436 Windows Events (by Emperor)] - Create your own Windows events.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=6487 Windows Service Control functions (by SumTingWong)] - Some limited functions to control services (create, start, stop, delete, check ...).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=81880 Windows Services (by engine)] - Windows Services UDF.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=163178 WRMF (by Luigi)] - WRMF - Windows Registry Monitor Call Function.&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=145099 _AdlibEnhance (by JScript)] - Enhance Adlib to call functions with parameters, pause and resume.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=160936 Android (by Moriba)] - Control any Android device.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=97826 Animated tray icons (by Yashied)] - Make animated tray icons easily.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=155442 ArrayMultiColSort (by Melba23)] - Function to sort a 2D array on several columns.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=180467 ArrayWorkshop (by czardas)] - Multidimensional array functions.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=59174 Associative array functions (by Nutster)] - Manage a version of associative arrays in single AutoIt variables. &lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=163577 Atom Table (by Ascend4nt)] - Store (add, find, delete, and query) strings locally (at program level) or globally (at OS level) with unique numerical identifiers.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=170087 Barcode generators (by willichan)] - Creates a Code128A/B/C or Creates a Code39 or Code39Extended optimized barcode from supplied data.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=131037 Binary (by Ward)] - &amp;lt;s&amp;gt;Functions to better deal with binary variables.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=162366 BinaryCall (by Ward)] - &amp;lt;s&amp;gt;Write Subroutines In C, Call In AutoIt.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=87735 BlockInputEx (by MrCreatoR)] - Supports a few features that built-in BlockInput() function does not.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=29763 Clipboard (by eltorro)] - When apps need to watch the clipboard.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=170630 ClipboardEx (by ozmike)] - Allows to have more than 1 item in the Clipboard. Handles all data types, not just text.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=81267 Clipboard History (by wraithdu)] - Save and restore the entire clipboard contents. Inspired by AHK&#039;s ClipboardAll.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=169610 CmdLine (by Jefrey)] - Collection of functions to parse command line arguments.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=126569 Console (by Shaggi)] - Functions and features to work wiht Console input/output.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=121833 Copy (by Yashied)] - Copy or move files and directories without suspending your script. Retrieve the current state (copied bytes, error code etc.) while copying.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=154684 Date / Time convert (by Melba23)] - Transform date/time formats.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=99106 _DLLStructDisplay (by Ascend4nt)] - Show Struct in ListView.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=111613 FASM (by Ward)] - &amp;lt;s&amp;gt;Embed compiled Flat Assembler (FASM) code in your script.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=157689 _FileGetMimeType (by Wiliat87)] - Retrieve MIME types based on the extension of the filename/filepath/URL provided.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=117033 File locking with cooperative semaphores (by willichan)] - Simple file locking without a server.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=157241 FindMimeFromData (by twbradio)] - FindMimeFromData using urlmon.dll.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=181997 Font Icon (by J2TeaM)] - Use Font Awesome in your AutoIt project.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=68422 HotString (by jvanegmond)] - Similar to the HotKey function but trigger on a string, instead of a key or key combination.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=86672 Inline Assembly (by Ward)] - &amp;lt;s&amp;gt;Assembles the code to binary machine code and runs it.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=173946 LASM - Light Assembler (by minxomat)] - Inline UDF for an Assembler.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=161628 LFN (by orbs)] - Overcome MAX_PATH limit of 256 chars.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=111492 Link Grammar for AutoIt (by JRowe)] -  Input is a regular sentence in English, German or Italian, output is a pattern parsed from the structure of the sentence.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=77463 MemoryDll (by Ward)] - &amp;lt;s&amp;gt;Embed DLLs in script and call functions from memory.&amp;lt;/s&amp;gt; File removed by author.&lt;br /&gt;
* [https://www.autoitscript.com/forum/files/file/147-mruau3 MRU (by Yashied)] - Most Recently Used (MRU) List Automation functions.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=186853 _Multiprocess (by jguinch)] - Run several external programs at the same time and retrieve the exit code of each process.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=188158 .NET Common Language Runtime (CLR) Framework (by Danyfirex, Junkew, Larsj, ptrex, Trancexx)] - Allows AutoIt to access .NET Class Libraries.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=101733 NoFocusLines (by Melba23)] - Remove the dotted focus lines from buttons, sliders, radios and checkboxes.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=149176 NotifyIcon (by FireFox)] - Create, delete and manage self notify icons (formerly TrayIconEx). &lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=63318 PixelGetColor (by Manadar)] - Get or Read Pixel from memory.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=167024 RDC (by Yashied)] - ReadDirectoryChanges Wrapper.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=51103 Resources (by Zedna)] - Embed any binary data into your AutoIt compiled EXE files.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=162499 ResourcesEx (by guinness)] - Up to date version of Zedna&#039;s Resources UDF. &lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=111215 Restart (by Yashied)] - Allows to restart a script from any location with full restoration of the original command line parameters.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=51547 SciLexer (by Kip)] - Editing control, supports multiple editors.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=152093 ScriptEditor (by pandel)] - ScriptEditor with I18N support and customizable lexer completely written in AutoIt (based on SciLexer).&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=162033 Spell Checker (by iCode)] - Spell Checker functions to call Hunspell, Hyphenate and MyThes.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=164444 Synology filestation (by nend)] - Functions to interact with a Synology NAS server.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=163328 TimeConvert (by orbs)] - Convert UTC to/from local time, and/or reformat the string representation.&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=129196 WinSnap (by Beege)] - Automatic Window Alignment by applying that &amp;quot;snappy edge&amp;quot; effect to your GUI.&lt;br /&gt;
[[Category:UDF]]&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14113</id>
		<title>AutoIt Programs</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14113"/>
		<updated>2019-10-21T00:50:04Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Misc/Others/Not yet grouped */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this site is to provide a list of programs created in AutoIt. This list should contain only fully functional programs rather than pieces of code, or any type of library (UDF).&amp;lt;br /&amp;gt;&lt;br /&gt;
You can talk about this list [http://www.autoitscript.com/forum/index.php?showtopic=167824 here].&lt;br /&gt;
&lt;br /&gt;
== Active Directory tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/153072-active-directory-tool-userinfo Active Directory Tool: UserInfo (by Marc)]&lt;br /&gt;
:This tool displays information for a specified user taken from Active Directory. It offers additional functions like comparing group membership with other users, unlock an account etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts AD Audit (by water)]&lt;br /&gt;
:On one/multiple big sheet(s) you get users (columns) and groups (rows). The list is sorted descending by number of members so you get the users with most groups and the groups with most members on top of the page. You can filter by (multiple) samaccountname(s), department or you can create your own LDAP query filter. You can filter the resulting list of groups using a Regular Expression.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADAT - Active Directory Administration Tool (by water)]&lt;br /&gt;
:ADAT is a tool for simplifying common AD administration tasks. Every administration task has its own tab. It is easy to add new functions (tabs) to the tool. Some often used functions are already available: list users, computers, OUs. File ADAT.ini can be customized to hold the AD logon information if necessary. By default the user running the script connects to the AD.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCU - Active Directory Compare Users (by water)]&lt;br /&gt;
:ADCU displays two users and their group membership in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCG - Active Directory Compare Groups (by water)]&lt;br /&gt;
:ADCG displays two groups and their direct members in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
== Desktop tools ==&lt;br /&gt;
* [https://funk.eu/hmw/ HMW - Hide my Windows (by KaFu)]&lt;br /&gt;
:HMW is a free program to hide away the Windows on your desktop. With HMW you can set any program Window as hidden, while the program itself will run silently in the background.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/80320-cop-color-picker-multi-value-color-picking COP - Color Picker - Multi value color picking (by KaFu)]&lt;br /&gt;
:Color Picker displays the color codes in six different formats, allows you to copy them to the clipboard, picks color under mouse pointer by using a magnifier, is moveable with keyboard cursor etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/134537-icu-icon-configuration-utility-updated-2013-may-24 ICU - Icon Configuration Utility (by KaFu)]&lt;br /&gt;
:Restore your desktop when the icons get &amp;quot;rearranged&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=122941 AutoIt Windows Screenshooter (by UEZ)] &lt;br /&gt;
:Takes a screenshot from any visible window or any region of the desktop, including freehand capturing. Allows you to watermark captured image, send it to a printer or the clipboard, etc. The program includes a basic image editor and a lot of additional functions.&lt;br /&gt;
&lt;br /&gt;
== File/Data/Image Processing/Viewers/Editors ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=164383 AuPad (by MikahS) ]&lt;br /&gt;
:This is a notepad program written entirely in AutoIt. It has all the basics of notepad that you would expect. Also includes Au3 Syntax Highlighting.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=110463 CSV-Editor (by funkey) ] &lt;br /&gt;
:This script allows you to edit CSV-files. Just doubleclick the entry you want to edit.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=144961 CSV Viewer (by llewxam) ]&lt;br /&gt;
:This tool displays CSV files when Excel is not available. It expands the columns to fit the text properly, which Excel doesn&#039;t do by default.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=118289 File Types Manager (by Yashied)] &lt;br /&gt;
:File Types Manager (FTM) is designed for viewing and editing properties (type name, icon, context menu, etc.) of the registered file types. This is something that is present in Windows XP by default and is available from the menu of any folder, but for some unknown reason is not in Windows Vista/7.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=80747 Search my files (byKaFu)]&lt;br /&gt;
:File searching and duplicate files finder tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=167578 SPDiff (by orbs) ]&lt;br /&gt;
:Single-pane character-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=165250 TextDiff (by wakillon) ]&lt;br /&gt;
:Side-by-side line-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [https://www.legroom.net/software/uniextract Universal Extractor (by LegRoom)]&lt;br /&gt;
:Universal Extractor is a program designed to decompress and extract files from any type of archive or installer, such as ZIP or RAR files, self-extracting EXE files, application installers, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=177432 ID3 Clean (by llewxam) ]&lt;br /&gt;
:Removes ID3V1 and ID3V2 tags.  Uses the frame size as calculated from frame header data to verify the start of the audio stream, and can remove broken and duplicated tags.&lt;br /&gt;
&lt;br /&gt;
== Games made in AutoIt ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=153735 A list of Games made ​​in Autoit]&lt;br /&gt;
&lt;br /&gt;
== Network tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=115976 IP Scanner (by llewxam) ] &lt;br /&gt;
:This is a very useful tool when performing any sort of network diagnostics, as it will identify the router without you needing to use ipconfig to find it, you can ping specific locations inside or outside the network, save the scan results to a CSV file, resolve the public IP, and open the addresses using a web browser, Windows Explorer, or a Remote Desktop session.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=105150 Network Connections Viewer (by trancexx) ]&lt;br /&gt;
:The script analyzes all of the network connections on your computer, either TCP or UDP. It&#039;ll give you port numbers, IP addresses, names of the processes issuing connections, their PIDs, locations on the local drive, user names, connection statuses, and hints on protocols for used ports (so that you know roughly what that connection is or could be). Also you will be given the ability to disable desired connections.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=88782 s!mpL3 LAN Messenger (by AoRaToS) ]&lt;br /&gt;
:s!mpL3 LAN Messenger is a simple to use, small, serverless messenger program designed and developed to offer chat communication over Local Area Networks. No installation is needed to make it work.&lt;br /&gt;
&lt;br /&gt;
== Misc/Others/Not yet grouped ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=139380 Computer Audit Tool (by llewxam)] &lt;br /&gt;
:All important physical information about the computer is gathered and displayed.&lt;br /&gt;
:The tool can be used as-is or a site-specific version can be compiled from the script itself, reducing time spent running the tool on each workstation and ensuring that the data is all appended to a single file for later review.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=143890 TextCorrection (by AZJIO)] &lt;br /&gt;
:This program is designed to automatically edit the text typed in the wrong keyboard layout. It is useful if you use multiple (2) languages in the OS.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=116735 TYPELIB Viewer (by trancexx)] &lt;br /&gt;
:Use this tool-script to retrieve details about specific type libraries.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=168087 GifCamEx (by wakillon)] &lt;br /&gt;
:Easy and handy to use for creating animated gifs from capture.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=170300 Bitmap2AscII (by wakillon)] &lt;br /&gt;
:You can convert an image into a ASCIIArt, and then save it as TXT, HTML, or an image.&lt;br /&gt;
&lt;br /&gt;
* [https://www.linuxliveusb.com LinuxLive USB Creator (by Thibaut Lauzière)] &lt;br /&gt;
:LiLi creates portable, bootable and virtualized USB stick running Linux.&lt;br /&gt;
&lt;br /&gt;
* [http://www.wsusoffline.net WSUS Offline Update (by Torsten Wittrock)] &lt;br /&gt;
:Offers a convenient way to update your Windows operating system offline. Includes offline update downloader for modern Windows operating systems.&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14112</id>
		<title>AutoIt Programs</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14112"/>
		<updated>2019-10-21T00:47:21Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Network tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this site is to provide a list of programs created in AutoIt. This list should contain only fully functional programs rather than pieces of code, or any type of library (UDF).&amp;lt;br /&amp;gt;&lt;br /&gt;
You can talk about this list [http://www.autoitscript.com/forum/index.php?showtopic=167824 here].&lt;br /&gt;
&lt;br /&gt;
== Active Directory tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/153072-active-directory-tool-userinfo Active Directory Tool: UserInfo (by Marc)]&lt;br /&gt;
:This tool displays information for a specified user taken from Active Directory. It offers additional functions like comparing group membership with other users, unlock an account etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts AD Audit (by water)]&lt;br /&gt;
:On one/multiple big sheet(s) you get users (columns) and groups (rows). The list is sorted descending by number of members so you get the users with most groups and the groups with most members on top of the page. You can filter by (multiple) samaccountname(s), department or you can create your own LDAP query filter. You can filter the resulting list of groups using a Regular Expression.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADAT - Active Directory Administration Tool (by water)]&lt;br /&gt;
:ADAT is a tool for simplifying common AD administration tasks. Every administration task has its own tab. It is easy to add new functions (tabs) to the tool. Some often used functions are already available: list users, computers, OUs. File ADAT.ini can be customized to hold the AD logon information if necessary. By default the user running the script connects to the AD.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCU - Active Directory Compare Users (by water)]&lt;br /&gt;
:ADCU displays two users and their group membership in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCG - Active Directory Compare Groups (by water)]&lt;br /&gt;
:ADCG displays two groups and their direct members in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
== Desktop tools ==&lt;br /&gt;
* [https://funk.eu/hmw/ HMW - Hide my Windows (by KaFu)]&lt;br /&gt;
:HMW is a free program to hide away the Windows on your desktop. With HMW you can set any program Window as hidden, while the program itself will run silently in the background.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/80320-cop-color-picker-multi-value-color-picking COP - Color Picker - Multi value color picking (by KaFu)]&lt;br /&gt;
:Color Picker displays the color codes in six different formats, allows you to copy them to the clipboard, picks color under mouse pointer by using a magnifier, is moveable with keyboard cursor etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/134537-icu-icon-configuration-utility-updated-2013-may-24 ICU - Icon Configuration Utility (by KaFu)]&lt;br /&gt;
:Restore your desktop when the icons get &amp;quot;rearranged&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=122941 AutoIt Windows Screenshooter (by UEZ)] &lt;br /&gt;
:Takes a screenshot from any visible window or any region of the desktop, including freehand capturing. Allows you to watermark captured image, send it to a printer or the clipboard, etc. The program includes a basic image editor and a lot of additional functions.&lt;br /&gt;
&lt;br /&gt;
== File/Data/Image Processing/Viewers/Editors ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=164383 AuPad (by MikahS) ]&lt;br /&gt;
:This is a notepad program written entirely in AutoIt. It has all the basics of notepad that you would expect. Also includes Au3 Syntax Highlighting.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=110463 CSV-Editor (by funkey) ] &lt;br /&gt;
:This script allows you to edit CSV-files. Just doubleclick the entry you want to edit.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=144961 CSV Viewer (by llewxam) ]&lt;br /&gt;
:This tool displays CSV files when Excel is not available. It expands the columns to fit the text properly, which Excel doesn&#039;t do by default.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=118289 File Types Manager (by Yashied)] &lt;br /&gt;
:File Types Manager (FTM) is designed for viewing and editing properties (type name, icon, context menu, etc.) of the registered file types. This is something that is present in Windows XP by default and is available from the menu of any folder, but for some unknown reason is not in Windows Vista/7.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=80747 Search my files (byKaFu)]&lt;br /&gt;
:File searching and duplicate files finder tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=167578 SPDiff (by orbs) ]&lt;br /&gt;
:Single-pane character-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=165250 TextDiff (by wakillon) ]&lt;br /&gt;
:Side-by-side line-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [https://www.legroom.net/software/uniextract Universal Extractor (by LegRoom)]&lt;br /&gt;
:Universal Extractor is a program designed to decompress and extract files from any type of archive or installer, such as ZIP or RAR files, self-extracting EXE files, application installers, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=177432 ID3 Clean (by llewxam) ]&lt;br /&gt;
:Removes ID3V1 and ID3V2 tags.  Uses the frame size as calculated from frame header data to verify the start of the audio stream, and can remove broken and duplicated tags.&lt;br /&gt;
&lt;br /&gt;
== Games made in AutoIt ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=153735 A list of Games made ​​in Autoit]&lt;br /&gt;
&lt;br /&gt;
== Network tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=115976 IP Scanner (by llewxam) ] &lt;br /&gt;
:This is a very useful tool when performing any sort of network diagnostics, as it will identify the router without you needing to use ipconfig to find it, you can ping specific locations inside or outside the network, save the scan results to a CSV file, resolve the public IP, and open the addresses using a web browser, Windows Explorer, or a Remote Desktop session.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=105150 Network Connections Viewer (by trancexx) ]&lt;br /&gt;
:The script analyzes all of the network connections on your computer, either TCP or UDP. It&#039;ll give you port numbers, IP addresses, names of the processes issuing connections, their PIDs, locations on the local drive, user names, connection statuses, and hints on protocols for used ports (so that you know roughly what that connection is or could be). Also you will be given the ability to disable desired connections.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=88782 s!mpL3 LAN Messenger (by AoRaToS) ]&lt;br /&gt;
:s!mpL3 LAN Messenger is a simple to use, small, serverless messenger program designed and developed to offer chat communication over Local Area Networks. No installation is needed to make it work.&lt;br /&gt;
&lt;br /&gt;
== Misc/Others/Not yet grouped ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=139380 Computer Audit Tool (by llewxam)] &lt;br /&gt;
:All important physical information about the computer is gathered and displayed.&lt;br /&gt;
:The tool can be used as-is or a site-specific version can be compiled from the script itself, reducing time spent running the tool on each workstation and ensuring that the data is all appended to a single file for later review.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=143890 TextCorrection (by AZJIO)] &lt;br /&gt;
:The program is designed to automatically edit the text typed in the wrong keyboard layout. It is useful if you use multiple (2) languages in the OS.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=116735 TYPELIB Viewer (by trancexx)] &lt;br /&gt;
:It&#039;s a tool-script you would use when you want to know details about specific type libraries.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=168087 GifCamEx (by wakillon)] &lt;br /&gt;
:Easy and handy to use for create animated gif from capture.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=170300 Bitmap2AscII (by wakillon)] &lt;br /&gt;
:You can convert an image into a ASCIIArt, and saved as TXT, HTML, or as an image.&lt;br /&gt;
&lt;br /&gt;
* [https://www.linuxliveusb.com LinuxLive USB Creator (by Thibaut Lauzière)] &lt;br /&gt;
:LiLi creates portable, bootable and virtualized USB stick running Linux..&lt;br /&gt;
&lt;br /&gt;
* [http://www.wsusoffline.net WSUS Offline Update (by Torsten Wittrock)] &lt;br /&gt;
:Offers a convenient way to update your Windows operating system offline. Includes offline update downloader for modern Windows operating systems.&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14111</id>
		<title>AutoIt Programs</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14111"/>
		<updated>2019-10-21T00:44:46Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* File/Data/Image Processing/Viewers/Editors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this site is to provide a list of programs created in AutoIt. This list should contain only fully functional programs rather than pieces of code, or any type of library (UDF).&amp;lt;br /&amp;gt;&lt;br /&gt;
You can talk about this list [http://www.autoitscript.com/forum/index.php?showtopic=167824 here].&lt;br /&gt;
&lt;br /&gt;
== Active Directory tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/153072-active-directory-tool-userinfo Active Directory Tool: UserInfo (by Marc)]&lt;br /&gt;
:This tool displays information for a specified user taken from Active Directory. It offers additional functions like comparing group membership with other users, unlock an account etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts AD Audit (by water)]&lt;br /&gt;
:On one/multiple big sheet(s) you get users (columns) and groups (rows). The list is sorted descending by number of members so you get the users with most groups and the groups with most members on top of the page. You can filter by (multiple) samaccountname(s), department or you can create your own LDAP query filter. You can filter the resulting list of groups using a Regular Expression.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADAT - Active Directory Administration Tool (by water)]&lt;br /&gt;
:ADAT is a tool for simplifying common AD administration tasks. Every administration task has its own tab. It is easy to add new functions (tabs) to the tool. Some often used functions are already available: list users, computers, OUs. File ADAT.ini can be customized to hold the AD logon information if necessary. By default the user running the script connects to the AD.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCU - Active Directory Compare Users (by water)]&lt;br /&gt;
:ADCU displays two users and their group membership in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCG - Active Directory Compare Groups (by water)]&lt;br /&gt;
:ADCG displays two groups and their direct members in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
== Desktop tools ==&lt;br /&gt;
* [https://funk.eu/hmw/ HMW - Hide my Windows (by KaFu)]&lt;br /&gt;
:HMW is a free program to hide away the Windows on your desktop. With HMW you can set any program Window as hidden, while the program itself will run silently in the background.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/80320-cop-color-picker-multi-value-color-picking COP - Color Picker - Multi value color picking (by KaFu)]&lt;br /&gt;
:Color Picker displays the color codes in six different formats, allows you to copy them to the clipboard, picks color under mouse pointer by using a magnifier, is moveable with keyboard cursor etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/134537-icu-icon-configuration-utility-updated-2013-may-24 ICU - Icon Configuration Utility (by KaFu)]&lt;br /&gt;
:Restore your desktop when the icons get &amp;quot;rearranged&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=122941 AutoIt Windows Screenshooter (by UEZ)] &lt;br /&gt;
:Takes a screenshot from any visible window or any region of the desktop, including freehand capturing. Allows you to watermark captured image, send it to a printer or the clipboard, etc. The program includes a basic image editor and a lot of additional functions.&lt;br /&gt;
&lt;br /&gt;
== File/Data/Image Processing/Viewers/Editors ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=164383 AuPad (by MikahS) ]&lt;br /&gt;
:This is a notepad program written entirely in AutoIt. It has all the basics of notepad that you would expect. Also includes Au3 Syntax Highlighting.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=110463 CSV-Editor (by funkey) ] &lt;br /&gt;
:This script allows you to edit CSV-files. Just doubleclick the entry you want to edit.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=144961 CSV Viewer (by llewxam) ]&lt;br /&gt;
:This tool displays CSV files when Excel is not available. It expands the columns to fit the text properly, which Excel doesn&#039;t do by default.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=118289 File Types Manager (by Yashied)] &lt;br /&gt;
:File Types Manager (FTM) is designed for viewing and editing properties (type name, icon, context menu, etc.) of the registered file types. This is something that is present in Windows XP by default and is available from the menu of any folder, but for some unknown reason is not in Windows Vista/7.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=80747 Search my files (byKaFu)]&lt;br /&gt;
:File searching and duplicate files finder tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=167578 SPDiff (by orbs) ]&lt;br /&gt;
:Single-pane character-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=165250 TextDiff (by wakillon) ]&lt;br /&gt;
:Side-by-side line-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [https://www.legroom.net/software/uniextract Universal Extractor (by LegRoom)]&lt;br /&gt;
:Universal Extractor is a program designed to decompress and extract files from any type of archive or installer, such as ZIP or RAR files, self-extracting EXE files, application installers, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=177432 ID3 Clean (by llewxam) ]&lt;br /&gt;
:Removes ID3V1 and ID3V2 tags.  Uses the frame size as calculated from frame header data to verify the start of the audio stream, and can remove broken and duplicated tags.&lt;br /&gt;
&lt;br /&gt;
== Games made in AutoIt ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=153735 A list of Games made ​​in Autoit]&lt;br /&gt;
&lt;br /&gt;
== Network tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=115976 IP Scanner (by llewxam) ] &lt;br /&gt;
:This is a very useful tool when performing any sort of network diagnostics, as it will identify the router without you needing to use ipconfig to find it, you can ping specific locations inside or outside the network, save the scan results to a CSV file, resolve the public IP, and open the addresses using a web browser, Windows Explorer, or a Remote Desktop session.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=105150 Network Connections Viewer (by trancexx) ]&lt;br /&gt;
:The script is analyzing every connection that your machine has. Either TCP or UDP. It&#039;ll give you port numbers, IP addresses, names of the processes issuing connections, their PIDs, locations on HD, user names, connection statuses, and hints on protocols for used ports (so that you know roughly what that connection is or could be). Also you will be given the ability to disable desired connections.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=88782 s!mpL3 LAN Messenger (by AoRaToS) ]&lt;br /&gt;
:s!mpL3 LAN Messenger is a simple to use, small, serverless messenger program designed and developed to offer chat communication over Local Area Networks. No installation is needed to make it work.&lt;br /&gt;
&lt;br /&gt;
== Misc/Others/Not yet grouped ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=139380 Computer Audit Tool (by llewxam)] &lt;br /&gt;
:All important physical information about the computer is gathered and displayed.&lt;br /&gt;
:The tool can be used as-is or a site-specific version can be compiled from the script itself, reducing time spent running the tool on each workstation and ensuring that the data is all appended to a single file for later review.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=143890 TextCorrection (by AZJIO)] &lt;br /&gt;
:The program is designed to automatically edit the text typed in the wrong keyboard layout. It is useful if you use multiple (2) languages in the OS.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=116735 TYPELIB Viewer (by trancexx)] &lt;br /&gt;
:It&#039;s a tool-script you would use when you want to know details about specific type libraries.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=168087 GifCamEx (by wakillon)] &lt;br /&gt;
:Easy and handy to use for create animated gif from capture.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=170300 Bitmap2AscII (by wakillon)] &lt;br /&gt;
:You can convert an image into a ASCIIArt, and saved as TXT, HTML, or as an image.&lt;br /&gt;
&lt;br /&gt;
* [https://www.linuxliveusb.com LinuxLive USB Creator (by Thibaut Lauzière)] &lt;br /&gt;
:LiLi creates portable, bootable and virtualized USB stick running Linux..&lt;br /&gt;
&lt;br /&gt;
* [http://www.wsusoffline.net WSUS Offline Update (by Torsten Wittrock)] &lt;br /&gt;
:Offers a convenient way to update your Windows operating system offline. Includes offline update downloader for modern Windows operating systems.&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14110</id>
		<title>AutoIt Programs</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14110"/>
		<updated>2019-10-21T00:42:23Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Desktop tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this site is to provide a list of programs created in AutoIt. This list should contain only fully functional programs rather than pieces of code, or any type of library (UDF).&amp;lt;br /&amp;gt;&lt;br /&gt;
You can talk about this list [http://www.autoitscript.com/forum/index.php?showtopic=167824 here].&lt;br /&gt;
&lt;br /&gt;
== Active Directory tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/153072-active-directory-tool-userinfo Active Directory Tool: UserInfo (by Marc)]&lt;br /&gt;
:This tool displays information for a specified user taken from Active Directory. It offers additional functions like comparing group membership with other users, unlock an account etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts AD Audit (by water)]&lt;br /&gt;
:On one/multiple big sheet(s) you get users (columns) and groups (rows). The list is sorted descending by number of members so you get the users with most groups and the groups with most members on top of the page. You can filter by (multiple) samaccountname(s), department or you can create your own LDAP query filter. You can filter the resulting list of groups using a Regular Expression.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADAT - Active Directory Administration Tool (by water)]&lt;br /&gt;
:ADAT is a tool for simplifying common AD administration tasks. Every administration task has its own tab. It is easy to add new functions (tabs) to the tool. Some often used functions are already available: list users, computers, OUs. File ADAT.ini can be customized to hold the AD logon information if necessary. By default the user running the script connects to the AD.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCU - Active Directory Compare Users (by water)]&lt;br /&gt;
:ADCU displays two users and their group membership in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCG - Active Directory Compare Groups (by water)]&lt;br /&gt;
:ADCG displays two groups and their direct members in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
== Desktop tools ==&lt;br /&gt;
* [https://funk.eu/hmw/ HMW - Hide my Windows (by KaFu)]&lt;br /&gt;
:HMW is a free program to hide away the Windows on your desktop. With HMW you can set any program Window as hidden, while the program itself will run silently in the background.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/80320-cop-color-picker-multi-value-color-picking COP - Color Picker - Multi value color picking (by KaFu)]&lt;br /&gt;
:Color Picker displays the color codes in six different formats, allows you to copy them to the clipboard, picks color under mouse pointer by using a magnifier, is moveable with keyboard cursor etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/134537-icu-icon-configuration-utility-updated-2013-may-24 ICU - Icon Configuration Utility (by KaFu)]&lt;br /&gt;
:Restore your desktop when the icons get &amp;quot;rearranged&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=122941 AutoIt Windows Screenshooter (by UEZ)] &lt;br /&gt;
:Takes a screenshot from any visible window or any region of the desktop, including freehand capturing. Allows you to watermark captured image, send it to a printer or the clipboard, etc. The program includes a basic image editor and a lot of additional functions.&lt;br /&gt;
&lt;br /&gt;
== File/Data/Image Processing/Viewers/Editors ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=164383 AuPad (by MikahS) ]&lt;br /&gt;
:This is a notepad program written entirely in AutoIt. It has all the basics of notepad that you would expect. Also with Au3 Syntax Highlighting.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=110463 CSV-Editor (by funkey) ] &lt;br /&gt;
:This script allows to edit CSV-files. Just doubleclick the entry you want to edit.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=144961 CSV Viewer (by llewxam) ]&lt;br /&gt;
:This tool displays CSV files when Excel is not available. It expands the columns to fit the text properly, which Excel doesn&#039;t by default.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=118289 File Types Manager (by Yashied)] &lt;br /&gt;
:File Types Manager (FTM) is designed to viewing and editing properties (type name, icon, context menu, etc.) of the registered file types. This is something that is present in Windows XP by default and is available from the menu of any folder, but for some unknown reason is not in the Windows Vista/7.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=80747 Search my files (byKaFu)]&lt;br /&gt;
:File searching and duplicates finder tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=167578 SPDiff (by orbs) ]&lt;br /&gt;
:Single-pane character-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=165250 TextDiff (by wakillon) ]&lt;br /&gt;
:Side-by-side line-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [https://www.legroom.net/software/uniextract Universal Extractor (by LegRoom)]&lt;br /&gt;
:Universal Extractor is a program designed to decompress and extract files from any type of archive or installer, such as ZIP or RAR files, self-extracting EXE files, application installers, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=177432 ID3 Clean (by llewxam) ]&lt;br /&gt;
:Removes ID3V1 and ID3V2 tags.  Uses the frame size as calculated from frame header data to verify the start of the audio stream, and can remove broken and duplicated tags,&lt;br /&gt;
&lt;br /&gt;
== Games made in AutoIt ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=153735 A list of Games made ​​in Autoit]&lt;br /&gt;
&lt;br /&gt;
== Network tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=115976 IP Scanner (by llewxam) ] &lt;br /&gt;
:This is a very useful tool when performing any sort of network diagnostics, as it will identify the router without you needing to use ipconfig to find it, you can ping specific locations inside or outside the network, save the scan results to a CSV file, resolve the public IP, and open the addresses using a web browser, Windows Explorer, or a Remote Desktop session.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=105150 Network Connections Viewer (by trancexx) ]&lt;br /&gt;
:The script is analyzing every connection that your machine has. Either TCP or UDP. It&#039;ll give you port numbers, IP addresses, names of the processes issuing connections, their PIDs, locations on HD, user names, connection statuses, and hints on protocols for used ports (so that you know roughly what that connection is or could be). Also you will be given the ability to disable desired connections.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=88782 s!mpL3 LAN Messenger (by AoRaToS) ]&lt;br /&gt;
:s!mpL3 LAN Messenger is a simple to use, small, serverless messenger program designed and developed to offer chat communication over Local Area Networks. No installation is needed to make it work.&lt;br /&gt;
&lt;br /&gt;
== Misc/Others/Not yet grouped ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=139380 Computer Audit Tool (by llewxam)] &lt;br /&gt;
:All important physical information about the computer is gathered and displayed.&lt;br /&gt;
:The tool can be used as-is or a site-specific version can be compiled from the script itself, reducing time spent running the tool on each workstation and ensuring that the data is all appended to a single file for later review.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=143890 TextCorrection (by AZJIO)] &lt;br /&gt;
:The program is designed to automatically edit the text typed in the wrong keyboard layout. It is useful if you use multiple (2) languages in the OS.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=116735 TYPELIB Viewer (by trancexx)] &lt;br /&gt;
:It&#039;s a tool-script you would use when you want to know details about specific type libraries.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=168087 GifCamEx (by wakillon)] &lt;br /&gt;
:Easy and handy to use for create animated gif from capture.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=170300 Bitmap2AscII (by wakillon)] &lt;br /&gt;
:You can convert an image into a ASCIIArt, and saved as TXT, HTML, or as an image.&lt;br /&gt;
&lt;br /&gt;
* [https://www.linuxliveusb.com LinuxLive USB Creator (by Thibaut Lauzière)] &lt;br /&gt;
:LiLi creates portable, bootable and virtualized USB stick running Linux..&lt;br /&gt;
&lt;br /&gt;
* [http://www.wsusoffline.net WSUS Offline Update (by Torsten Wittrock)] &lt;br /&gt;
:Offers a convenient way to update your Windows operating system offline. Includes offline update downloader for modern Windows operating systems.&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14109</id>
		<title>AutoIt Programs</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt_Programs&amp;diff=14109"/>
		<updated>2019-10-21T00:40:05Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Active Directory tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this site is to provide a list of programs created in AutoIt. This list should contain only fully functional programs rather than pieces of code, or any type of library (UDF).&amp;lt;br /&amp;gt;&lt;br /&gt;
You can talk about this list [http://www.autoitscript.com/forum/index.php?showtopic=167824 here].&lt;br /&gt;
&lt;br /&gt;
== Active Directory tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/153072-active-directory-tool-userinfo Active Directory Tool: UserInfo (by Marc)]&lt;br /&gt;
:This tool displays information for a specified user taken from Active Directory. It offers additional functions like comparing group membership with other users, unlock an account etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts AD Audit (by water)]&lt;br /&gt;
:On one/multiple big sheet(s) you get users (columns) and groups (rows). The list is sorted descending by number of members so you get the users with most groups and the groups with most members on top of the page. You can filter by (multiple) samaccountname(s), department or you can create your own LDAP query filter. You can filter the resulting list of groups using a Regular Expression.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADAT - Active Directory Administration Tool (by water)]&lt;br /&gt;
:ADAT is a tool for simplifying common AD administration tasks. Every administration task has its own tab. It is easy to add new functions (tabs) to the tool. Some often used functions are already available: list users, computers, OUs. File ADAT.ini can be customized to hold the AD logon information if necessary. By default the user running the script connects to the AD.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCU - Active Directory Compare Users (by water)]&lt;br /&gt;
:ADCU displays two users and their group membership in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/110614-active-directory-example-scripts ADCG - Active Directory Compare Groups (by water)]&lt;br /&gt;
:ADCG displays two groups and their direct members in two listviews. You can filter and export the data to Excel, Outlook mail and the clipboard.&lt;br /&gt;
&lt;br /&gt;
== Desktop tools ==&lt;br /&gt;
* [https://funk.eu/hmw/ HMW - Hide my Windows (by KaFu)]&lt;br /&gt;
:HMW is a free program to hide away the Windows on your desktop. With HMW you can set any program Window as hidden, while the program itself will run silently in the background.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/80320-cop-color-picker-multi-value-color-picking COP - Color Picker - Multi value color picking (by KaFu)]&lt;br /&gt;
:Color Picker displays the color codes in six different formats, allows to copy them to the clipboard, picks color under mouse pointer by using a magnifier, moveable with keyboard cursor etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/134537-icu-icon-configuration-utility-updated-2013-may-24 ICU - Icon Configuration Utility (by KaFu)]&lt;br /&gt;
:Restore your desktop when the icons get &amp;quot;rearranged&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=122941 AutoIt Windows Screenshooter (by UEZ)] &lt;br /&gt;
:Takes a screenshot from any visible window or any region of the desktop incl. freehand capturing. Allows to watermark captured image, send it to a printer or the clipboard etc. The program includes a basic image editor and a lot of additional functions.&lt;br /&gt;
&lt;br /&gt;
== File/Data/Image Processing/Viewers/Editors ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=164383 AuPad (by MikahS) ]&lt;br /&gt;
:This is a notepad program written entirely in AutoIt. It has all the basics of notepad that you would expect. Also with Au3 Syntax Highlighting.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=110463 CSV-Editor (by funkey) ] &lt;br /&gt;
:This script allows to edit CSV-files. Just doubleclick the entry you want to edit.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=144961 CSV Viewer (by llewxam) ]&lt;br /&gt;
:This tool displays CSV files when Excel is not available. It expands the columns to fit the text properly, which Excel doesn&#039;t by default.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=118289 File Types Manager (by Yashied)] &lt;br /&gt;
:File Types Manager (FTM) is designed to viewing and editing properties (type name, icon, context menu, etc.) of the registered file types. This is something that is present in Windows XP by default and is available from the menu of any folder, but for some unknown reason is not in the Windows Vista/7.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=80747 Search my files (byKaFu)]&lt;br /&gt;
:File searching and duplicates finder tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=167578 SPDiff (by orbs) ]&lt;br /&gt;
:Single-pane character-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=165250 TextDiff (by wakillon) ]&lt;br /&gt;
:Side-by-side line-based text comparison tool.&lt;br /&gt;
&lt;br /&gt;
* [https://www.legroom.net/software/uniextract Universal Extractor (by LegRoom)]&lt;br /&gt;
:Universal Extractor is a program designed to decompress and extract files from any type of archive or installer, such as ZIP or RAR files, self-extracting EXE files, application installers, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=177432 ID3 Clean (by llewxam) ]&lt;br /&gt;
:Removes ID3V1 and ID3V2 tags.  Uses the frame size as calculated from frame header data to verify the start of the audio stream, and can remove broken and duplicated tags,&lt;br /&gt;
&lt;br /&gt;
== Games made in AutoIt ==&lt;br /&gt;
* [https://www.autoitscript.com/forum/index.php?showtopic=153735 A list of Games made ​​in Autoit]&lt;br /&gt;
&lt;br /&gt;
== Network tools ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=115976 IP Scanner (by llewxam) ] &lt;br /&gt;
:This is a very useful tool when performing any sort of network diagnostics, as it will identify the router without you needing to use ipconfig to find it, you can ping specific locations inside or outside the network, save the scan results to a CSV file, resolve the public IP, and open the addresses using a web browser, Windows Explorer, or a Remote Desktop session.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=105150 Network Connections Viewer (by trancexx) ]&lt;br /&gt;
:The script is analyzing every connection that your machine has. Either TCP or UDP. It&#039;ll give you port numbers, IP addresses, names of the processes issuing connections, their PIDs, locations on HD, user names, connection statuses, and hints on protocols for used ports (so that you know roughly what that connection is or could be). Also you will be given the ability to disable desired connections.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=88782 s!mpL3 LAN Messenger (by AoRaToS) ]&lt;br /&gt;
:s!mpL3 LAN Messenger is a simple to use, small, serverless messenger program designed and developed to offer chat communication over Local Area Networks. No installation is needed to make it work.&lt;br /&gt;
&lt;br /&gt;
== Misc/Others/Not yet grouped ==&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=139380 Computer Audit Tool (by llewxam)] &lt;br /&gt;
:All important physical information about the computer is gathered and displayed.&lt;br /&gt;
:The tool can be used as-is or a site-specific version can be compiled from the script itself, reducing time spent running the tool on each workstation and ensuring that the data is all appended to a single file for later review.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=143890 TextCorrection (by AZJIO)] &lt;br /&gt;
:The program is designed to automatically edit the text typed in the wrong keyboard layout. It is useful if you use multiple (2) languages in the OS.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=116735 TYPELIB Viewer (by trancexx)] &lt;br /&gt;
:It&#039;s a tool-script you would use when you want to know details about specific type libraries.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=168087 GifCamEx (by wakillon)] &lt;br /&gt;
:Easy and handy to use for create animated gif from capture.&lt;br /&gt;
&lt;br /&gt;
* [http://www.autoitscript.com/forum/index.php?showtopic=170300 Bitmap2AscII (by wakillon)] &lt;br /&gt;
:You can convert an image into a ASCIIArt, and saved as TXT, HTML, or as an image.&lt;br /&gt;
&lt;br /&gt;
* [https://www.linuxliveusb.com LinuxLive USB Creator (by Thibaut Lauzière)] &lt;br /&gt;
:LiLi creates portable, bootable and virtualized USB stick running Linux..&lt;br /&gt;
&lt;br /&gt;
* [http://www.wsusoffline.net WSUS Offline Update (by Torsten Wittrock)] &lt;br /&gt;
:Offers a convenient way to update your Windows operating system offline. Includes offline update downloader for modern Windows operating systems.&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14108</id>
		<title>AutoIt3Wrapper Directives</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14108"/>
		<updated>2019-10-20T18:49:06Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Run Before And After Directives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== List of AutoIt3Wrapper Directives ==&lt;br /&gt;
&lt;br /&gt;
This is a list of compiler directives used by AutoIt3Wrapper.exe and their descriptions.&lt;br /&gt;
&lt;br /&gt;
== AutoIt3 ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_testing || (Y/N) || Skip Tidy, Obfuscator and cvsWrapper for speed while testing. || N &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_UseX64 || (Y/N) || Use X64 versions for AutoIt3_x64 or AUT2EXE_x64. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Version || (B/P) || Use Beta or Production for AutoIt3 and AUT2EXE. || P&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_Debug_Mode || (Y/N) || Run Script with console debugging. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_Minimized || (Y/N) || Minimize SciTE while script is running. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_OutputPane_Minimized || (Y/N) || Toggle SciTE output pane at run time so its not shown. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Autoit3Dir || || Optionally override the base AutoIt3 install directory. || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Aut2exe || || Optionally override the Aut2exe.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_AutoIt3 || || Optionally override the Autoit3.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Add_Constants || || Add the needed standard constant include files. Will only run one time. || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AUT2EXE ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Icon || || Filename of the Ico file to use ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile || || Target exe/a3x filename. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_Type || || a3x=small AutoIt3 file exe=Standalone executable || exe&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_X64 || || Target exe filename for X64 compile. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Compression || || Compression parameter 0-4. 0=Low 2=normal 4=High. || 2&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UseUpx || (Y/N) || Compress output program. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UPX_Parameters || || Override the default setting for UPX. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Change2CUI || (Y/N) || Change output program to CUI in stead of GUI. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Compile_both || (Y/N) || Compile both X86 and X64 in one run. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Target Program Resource Info ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Comment || || Comment field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Description|| ||  Description field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Fileversion || || File Version || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_FileVersion_AutoIncrement || (Y/N/P) || AutoIncrement FileVersion After AUTEXE is finished. P=Prompt, Will ask at compilation time if you want to increase the version number || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_ProductVersion || || Product Version. || Default is the AutoIt3 version used.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Language || || Resource Language code. || 2057 which is English (United Kingdom)&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_LegalCopyright || || Copyright field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_requestedExecutionLevel || || asInvoker, highestAvailable, requireAdministrator or None (remove the trustInfo section). || Default is the setting from AUT2EXE - asInvoker.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_Compatibility || || Vista, Windows7 both allowed separated by a comma. ||  None&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Res_SaveSource || (Y/N) || Save a copy of the script source in the EXE resources.  If Y then the content of the script source depends on the #AutoIt3Wrapper_Run_Obfuscator and #obfuscator_parameters directives. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Add Extra Fields to The Resources ===&lt;br /&gt;
&lt;br /&gt;
A maximum of fifteen free form resource fields.The following variables are available:&lt;br /&gt;
&lt;br /&gt;
%AutoItVer% = will be replaced with the version of AutoIt3&lt;br /&gt;
	&lt;br /&gt;
%date% = PC date in short date format&lt;br /&gt;
&lt;br /&gt;
%longdate% = PC date in long date format&lt;br /&gt;
&lt;br /&gt;
%time% = PC timeformat&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
&lt;br /&gt;
Add extra ICO files to the resources which can be used with TraySetIcon(@ScriptFullPath, 5) etc.&lt;br /&gt;
&lt;br /&gt;
list of filename of the Ico files to be added, First one will have number 5, then 6 etc.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_Icon_AddFilename[,LanguageCode] of ICO to be added.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_File_AddFilename[,Section [,ResName[,LanguageCode]]] to be added.&lt;br /&gt;
&lt;br /&gt;
== Tidy ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_Tidy || (Y/N)||  Run Tidy before compilation. || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Tidy_Stop_OnError || (Y/N) || Continue when only Warnings. || Y&lt;br /&gt;
|-&lt;br /&gt;
|  #Tidy_Parameters || || See the SciTE4AutoIt3 helpfile for options. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Stripper ==&lt;br /&gt;
&lt;br /&gt;
The directives used within the script to control Au3Stripper are as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_Run_Au3Stripper || (y/n) || Run Au3Stripper before compilation. || n&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Parameters || || Use the parameters as listed below. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Off ||  || Stop the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_On ||  || Start the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Funcs ||  || Do not Strip these functions. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Variables ||  || Do not Strip these variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Parameters&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| PreExpand ||  || Replace any reference to a Global Const variable with its actual value. || &lt;br /&gt;
|-&lt;br /&gt;
| StripOnly || (SF/SV) ||  || SV = 1&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedFunc ||  || Remove unused Funcs. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedVars ||  || Remove unused Global variable declarations. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripOnlyIncludes ||  || Same as /SO but leaves the main script untouched. ||&lt;br /&gt;
|-&lt;br /&gt;
| MergeOnly ||  || Will produce a scriptfile as AUT2EXE includes in the Compiled EXE. This allows you to find the proper linenumber when errors are reported. ||&lt;br /&gt;
|-&lt;br /&gt;
| RenameMinimum ||  || Generates a much smaller file by substituting function and variable names with unique 2+-character names. ||&lt;br /&gt;
|-&lt;br /&gt;
| ShowConsoleInfo || (0/1/9) || 0 = Minimal output to the console - only warnings and errors. 1 = Show more progress information 9 = Show all debug lines as found in the Au3Stripper.log. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Beta ||  || Use the ...\AutoIt\Beta\Include files if installed. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Check ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_AU3Check || (Y/N) || Run au3check before compilation. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Parameters || || Au3Check parameters ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Stop_OnWarning || (Y/N) || N=Continue on Warnings. || Y (Always stop on warnings.)&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_PlugIn_Funcs || || Define PlugIn function names separated by a comma to avoid AU3Check errors. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning || (Y/N/V) || Run versioning to update the script source. V=only run when fileversion is increased by #AutoIt3Wrapper_Res_FileVersion_AutoIncrement. || N&lt;br /&gt;
 |-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning_Parameters || || /NoPrompt: Will skip the Comments prompt /Comments: Text to added in the Comments. It can also contain the below variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Run Before And After Directives ==&lt;br /&gt;
&lt;br /&gt;
The following directives can contain these variables:&lt;br /&gt;
&lt;br /&gt;
%in% , %out%, %outx64%, %icon% which will be replaced by the fullpath\filename.&lt;br /&gt;
&lt;br /&gt;
%scriptdir% same as @ScriptDir and %scriptfile% = filename without extension.&lt;br /&gt;
&lt;br /&gt;
%fileversion% is the information from the #AutoIt3Wrapper_Res_Fileversion directive&lt;br /&gt;
&lt;br /&gt;
%scitedir% will be replaced by the SciTE program directory&lt;br /&gt;
&lt;br /&gt;
%autoitdir% will be replaced by the AutoIt3 program directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_Run_Before process to run before compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&lt;br /&gt;
#AutoIt3Wrapper_Run_After process to run after compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditional Directives ==&lt;br /&gt;
&lt;br /&gt;
Optional use this format for the supported directives to have seperate directive values for Run and Compile.&lt;br /&gt;
	&lt;br /&gt;
The GUI is not available when this format is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_If_Run&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=n&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=n&lt;br /&gt;
 #Tidy_Parameters=&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=n&lt;br /&gt;
#AutoIt3Wrapper_If_Compile&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=y&lt;br /&gt;
 #Tidy_Parameters=/gd /nsdp&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=y&lt;br /&gt;
#AutoIt3Wrapper_EndIf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14107</id>
		<title>AutoIt3Wrapper Directives</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14107"/>
		<updated>2019-10-20T18:43:50Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* AU3Stripper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== List of AutoIt3Wrapper Directives ==&lt;br /&gt;
&lt;br /&gt;
This is a list of compiler directives used by AutoIt3Wrapper.exe and their descriptions.&lt;br /&gt;
&lt;br /&gt;
== AutoIt3 ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_testing || (Y/N) || Skip Tidy, Obfuscator and cvsWrapper for speed while testing. || N &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_UseX64 || (Y/N) || Use X64 versions for AutoIt3_x64 or AUT2EXE_x64. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Version || (B/P) || Use Beta or Production for AutoIt3 and AUT2EXE. || P&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_Debug_Mode || (Y/N) || Run Script with console debugging. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_Minimized || (Y/N) || Minimize SciTE while script is running. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_OutputPane_Minimized || (Y/N) || Toggle SciTE output pane at run time so its not shown. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Autoit3Dir || || Optionally override the base AutoIt3 install directory. || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Aut2exe || || Optionally override the Aut2exe.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_AutoIt3 || || Optionally override the Autoit3.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Add_Constants || || Add the needed standard constant include files. Will only run one time. || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AUT2EXE ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Icon || || Filename of the Ico file to use ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile || || Target exe/a3x filename. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_Type || || a3x=small AutoIt3 file exe=Standalone executable || exe&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_X64 || || Target exe filename for X64 compile. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Compression || || Compression parameter 0-4. 0=Low 2=normal 4=High. || 2&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UseUpx || (Y/N) || Compress output program. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UPX_Parameters || || Override the default setting for UPX. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Change2CUI || (Y/N) || Change output program to CUI in stead of GUI. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Compile_both || (Y/N) || Compile both X86 and X64 in one run. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Target Program Resource Info ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Comment || || Comment field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Description|| ||  Description field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Fileversion || || File Version || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_FileVersion_AutoIncrement || (Y/N/P) || AutoIncrement FileVersion After AUTEXE is finished. P=Prompt, Will ask at compilation time if you want to increase the version number || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_ProductVersion || || Product Version. || Default is the AutoIt3 version used.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Language || || Resource Language code. || 2057 which is English (United Kingdom)&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_LegalCopyright || || Copyright field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_requestedExecutionLevel || || asInvoker, highestAvailable, requireAdministrator or None (remove the trustInfo section). || Default is the setting from AUT2EXE - asInvoker.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_Compatibility || || Vista, Windows7 both allowed separated by a comma. ||  None&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Res_SaveSource || (Y/N) || Save a copy of the script source in the EXE resources.  If Y then the content of the script source depends on the #AutoIt3Wrapper_Run_Obfuscator and #obfuscator_parameters directives. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Add Extra Fields to The Resources ===&lt;br /&gt;
&lt;br /&gt;
A maximum of fifteen free form resource fields.The following variables are available:&lt;br /&gt;
&lt;br /&gt;
%AutoItVer% = will be replaced with the version of AutoIt3&lt;br /&gt;
	&lt;br /&gt;
%date% = PC date in short date format&lt;br /&gt;
&lt;br /&gt;
%longdate% = PC date in long date format&lt;br /&gt;
&lt;br /&gt;
%time% = PC timeformat&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
&lt;br /&gt;
Add extra ICO files to the resources which can be used with TraySetIcon(@ScriptFullPath, 5) etc.&lt;br /&gt;
&lt;br /&gt;
list of filename of the Ico files to be added, First one will have number 5, then 6 etc.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_Icon_AddFilename[,LanguageCode] of ICO to be added.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_File_AddFilename[,Section [,ResName[,LanguageCode]]] to be added.&lt;br /&gt;
&lt;br /&gt;
== Tidy ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_Tidy || (Y/N)||  Run Tidy before compilation. || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Tidy_Stop_OnError || (Y/N) || Continue when only Warnings. || Y&lt;br /&gt;
|-&lt;br /&gt;
|  #Tidy_Parameters || || See the SciTE4AutoIt3 helpfile for options. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Stripper ==&lt;br /&gt;
&lt;br /&gt;
The directives used within the script to control Au3Stripper are as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_Run_Au3Stripper || (y/n) || Run Au3Stripper before compilation. || n&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Parameters || || Use the parameters as listed below. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Off ||  || Stop the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_On ||  || Start the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Funcs ||  || Do not Strip these functions. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Variables ||  || Do not Strip these variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Parameters&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| PreExpand ||  || Replace any reference to a Global Const variable with its actual value. || &lt;br /&gt;
|-&lt;br /&gt;
| StripOnly || (SF/SV) ||  || SV = 1&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedFunc ||  || Remove unused Funcs. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedVars ||  || Remove unused Global variable declarations. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripOnlyIncludes ||  || Same as /SO but leaves the main script untouched. ||&lt;br /&gt;
|-&lt;br /&gt;
| MergeOnly ||  || Will produce a scriptfile as AUT2EXE includes in the Compiled EXE. This allows you to find the proper linenumber when errors are reported. ||&lt;br /&gt;
|-&lt;br /&gt;
| RenameMinimum ||  || Generates a much smaller file by substituting function and variable names with unique 2+-character names. ||&lt;br /&gt;
|-&lt;br /&gt;
| ShowConsoleInfo || (0/1/9) || 0 = Minimal output to the console - only warnings and errors. 1 = Show more progress information 9 = Show all debug lines as found in the Au3Stripper.log. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Beta ||  || Use the ...\AutoIt\Beta\Include files if installed. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Check ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_AU3Check || (Y/N) || Run au3check before compilation. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Parameters || || Au3Check parameters ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Stop_OnWarning || (Y/N) || N=Continue on Warnings. || Y (Always stop on warnings.)&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_PlugIn_Funcs || || Define PlugIn function names separated by a comma to avoid AU3Check errors. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning || (Y/N/V) || Run versioning to update the script source. V=only run when fileversion is increased by #AutoIt3Wrapper_Res_FileVersion_AutoIncrement. || N&lt;br /&gt;
 |-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning_Parameters || || /NoPrompt: Will skip the Comments prompt /Comments: Text to added in the Comments. It can also contain the below variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Run Before And After Directives ==&lt;br /&gt;
&lt;br /&gt;
The following directives can contain: these variables&lt;br /&gt;
&lt;br /&gt;
%in% , %out%, %outx64%, %icon% which will be replaced by the fullpath\filename.&lt;br /&gt;
&lt;br /&gt;
%scriptdir% same as @ScriptDir and %scriptfile% = filename without extension.&lt;br /&gt;
&lt;br /&gt;
%fileversion% is the information from the #AutoIt3Wrapper_Res_Fileversion directive&lt;br /&gt;
&lt;br /&gt;
%scitedir% will be replaced by the SciTE program directory&lt;br /&gt;
&lt;br /&gt;
%autoitdir% will be replaced by the AutoIt3 program directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_Run_Before process to run before compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&lt;br /&gt;
#AutoIt3Wrapper_Run_After process to run after compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditional Directives ==&lt;br /&gt;
&lt;br /&gt;
Optional use this format for the supported directives to have seperate directive values for Run and Compile.&lt;br /&gt;
	&lt;br /&gt;
The GUI is not available when this format is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_If_Run&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=n&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=n&lt;br /&gt;
 #Tidy_Parameters=&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=n&lt;br /&gt;
#AutoIt3Wrapper_If_Compile&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=y&lt;br /&gt;
 #Tidy_Parameters=/gd /nsdp&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=y&lt;br /&gt;
#AutoIt3Wrapper_EndIf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14106</id>
		<title>AutoIt3Wrapper Directives</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14106"/>
		<updated>2019-10-20T18:32:14Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Add Extra Files to The Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== List of AutoIt3Wrapper Directives ==&lt;br /&gt;
&lt;br /&gt;
This is a list of compiler directives used by AutoIt3Wrapper.exe and their descriptions.&lt;br /&gt;
&lt;br /&gt;
== AutoIt3 ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_testing || (Y/N) || Skip Tidy, Obfuscator and cvsWrapper for speed while testing. || N &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_UseX64 || (Y/N) || Use X64 versions for AutoIt3_x64 or AUT2EXE_x64. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Version || (B/P) || Use Beta or Production for AutoIt3 and AUT2EXE. || P&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_Debug_Mode || (Y/N) || Run Script with console debugging. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_Minimized || (Y/N) || Minimize SciTE while script is running. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_OutputPane_Minimized || (Y/N) || Toggle SciTE output pane at run time so its not shown. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Autoit3Dir || || Optionally override the base AutoIt3 install directory. || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Aut2exe || || Optionally override the Aut2exe.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_AutoIt3 || || Optionally override the Autoit3.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Add_Constants || || Add the needed standard constant include files. Will only run one time. || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AUT2EXE ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Icon || || Filename of the Ico file to use ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile || || Target exe/a3x filename. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_Type || || a3x=small AutoIt3 file exe=Standalone executable || exe&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_X64 || || Target exe filename for X64 compile. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Compression || || Compression parameter 0-4. 0=Low 2=normal 4=High. || 2&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UseUpx || (Y/N) || Compress output program. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UPX_Parameters || || Override the default setting for UPX. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Change2CUI || (Y/N) || Change output program to CUI in stead of GUI. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Compile_both || (Y/N) || Compile both X86 and X64 in one run. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Target Program Resource Info ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Comment || || Comment field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Description|| ||  Description field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Fileversion || || File Version || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_FileVersion_AutoIncrement || (Y/N/P) || AutoIncrement FileVersion After AUTEXE is finished. P=Prompt, Will ask at compilation time if you want to increase the version number || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_ProductVersion || || Product Version. || Default is the AutoIt3 version used.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Language || || Resource Language code. || 2057 which is English (United Kingdom)&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_LegalCopyright || || Copyright field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_requestedExecutionLevel || || asInvoker, highestAvailable, requireAdministrator or None (remove the trustInfo section). || Default is the setting from AUT2EXE - asInvoker.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_Compatibility || || Vista, Windows7 both allowed separated by a comma. ||  None&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Res_SaveSource || (Y/N) || Save a copy of the script source in the EXE resources.  If Y then the content of the script source depends on the #AutoIt3Wrapper_Run_Obfuscator and #obfuscator_parameters directives. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Add Extra Fields to The Resources ===&lt;br /&gt;
&lt;br /&gt;
A maximum of fifteen free form resource fields.The following variables are available:&lt;br /&gt;
&lt;br /&gt;
%AutoItVer% = will be replaced with the version of AutoIt3&lt;br /&gt;
	&lt;br /&gt;
%date% = PC date in short date format&lt;br /&gt;
&lt;br /&gt;
%longdate% = PC date in long date format&lt;br /&gt;
&lt;br /&gt;
%time% = PC timeformat&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
&lt;br /&gt;
Add extra ICO files to the resources which can be used with TraySetIcon(@ScriptFullPath, 5) etc.&lt;br /&gt;
&lt;br /&gt;
list of filename of the Ico files to be added, First one will have number 5, then 6 etc.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_Icon_AddFilename[,LanguageCode] of ICO to be added.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_File_AddFilename[,Section [,ResName[,LanguageCode]]] to be added.&lt;br /&gt;
&lt;br /&gt;
== Tidy ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_Tidy || (Y/N)||  Run Tidy before compilation. || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Tidy_Stop_OnError || (Y/N) || Continue when only Warnings. || Y&lt;br /&gt;
|-&lt;br /&gt;
|  #Tidy_Parameters || || See the SciTE4AutoIt3 helpfile for options. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Stripper ==&lt;br /&gt;
&lt;br /&gt;
The directives used within the script to control Au3Stripper are as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_Run_Au3Stripper || (y/n) || Run Au3Stripper before compilation. || n&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Parameters || || Use the parameters as listed below. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Off ||  || Stop the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_On ||  || Start the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Funcs ||  || Do not Strip these functions. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Variables ||  || Do not Strip these variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Parameters&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| PreExpand ||  || Replace and reference to a Global Const variable with its actual value. || &lt;br /&gt;
|-&lt;br /&gt;
| StripOnly || (SF/SV) ||  || SV = 1&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedFunc ||  || Remove unused Funcs. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedVars ||  || Remove unused Global variable declarations. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripOnlyIncludes ||  || Same as /SO but leaves the main script untouched. ||&lt;br /&gt;
|-&lt;br /&gt;
| MergeOnly ||  || Will produce a scriptfile as AUT2EXE includes in the Compiled EXE. This allows you to find the proper linenumber when errors are reported. ||&lt;br /&gt;
|-&lt;br /&gt;
| RenameMinimum ||  || Generates a much smaller file by substituting function and variable names with unique 2+-character names. ||&lt;br /&gt;
|-&lt;br /&gt;
| ShowConsoleInfo || (0/1/9) || 0 = Minimal output to the console - only warnings and errors. 1 = Show more progress information 9 = Show all debug lines as found in the Au3Stripper.log. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Beta ||  || Use the ...\AutoIt\Beta\Include files if installed. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Check ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_AU3Check || (Y/N) || Run au3check before compilation. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Parameters || || Au3Check parameters ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Stop_OnWarning || (Y/N) || N=Continue on Warnings. || Y (Always stop on warnings.)&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_PlugIn_Funcs || || Define PlugIn function names separated by a comma to avoid AU3Check errors. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning || (Y/N/V) || Run versioning to update the script source. V=only run when fileversion is increased by #AutoIt3Wrapper_Res_FileVersion_AutoIncrement. || N&lt;br /&gt;
 |-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning_Parameters || || /NoPrompt: Will skip the Comments prompt /Comments: Text to added in the Comments. It can also contain the below variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Run Before And After Directives ==&lt;br /&gt;
&lt;br /&gt;
The following directives can contain: these variables&lt;br /&gt;
&lt;br /&gt;
%in% , %out%, %outx64%, %icon% which will be replaced by the fullpath\filename.&lt;br /&gt;
&lt;br /&gt;
%scriptdir% same as @ScriptDir and %scriptfile% = filename without extension.&lt;br /&gt;
&lt;br /&gt;
%fileversion% is the information from the #AutoIt3Wrapper_Res_Fileversion directive&lt;br /&gt;
&lt;br /&gt;
%scitedir% will be replaced by the SciTE program directory&lt;br /&gt;
&lt;br /&gt;
%autoitdir% will be replaced by the AutoIt3 program directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_Run_Before process to run before compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&lt;br /&gt;
#AutoIt3Wrapper_Run_After process to run after compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditional Directives ==&lt;br /&gt;
&lt;br /&gt;
Optional use this format for the supported directives to have seperate directive values for Run and Compile.&lt;br /&gt;
	&lt;br /&gt;
The GUI is not available when this format is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_If_Run&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=n&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=n&lt;br /&gt;
 #Tidy_Parameters=&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=n&lt;br /&gt;
#AutoIt3Wrapper_If_Compile&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=y&lt;br /&gt;
 #Tidy_Parameters=/gd /nsdp&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=y&lt;br /&gt;
#AutoIt3Wrapper_EndIf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14105</id>
		<title>AutoIt3Wrapper Directives</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14105"/>
		<updated>2019-10-20T17:53:24Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* AUT2EXE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== List of AutoIt3Wrapper Directives ==&lt;br /&gt;
&lt;br /&gt;
This is a list of compiler directives used by AutoIt3Wrapper.exe and their descriptions.&lt;br /&gt;
&lt;br /&gt;
== AutoIt3 ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_testing || (Y/N) || Skip Tidy, Obfuscator and cvsWrapper for speed while testing. || N &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_UseX64 || (Y/N) || Use X64 versions for AutoIt3_x64 or AUT2EXE_x64. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Version || (B/P) || Use Beta or Production for AutoIt3 and AUT2EXE. || P&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_Debug_Mode || (Y/N) || Run Script with console debugging. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_Minimized || (Y/N) || Minimize SciTE while script is running. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_OutputPane_Minimized || (Y/N) || Toggle SciTE output pane at run time so its not shown. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Autoit3Dir || || Optionally override the base AutoIt3 install directory. || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Aut2exe || || Optionally override the Aut2exe.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_AutoIt3 || || Optionally override the Autoit3.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Add_Constants || || Add the needed standard constant include files. Will only run one time. || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AUT2EXE ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Icon || || Filename of the Ico file to use ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile || || Target exe/a3x filename. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_Type || || a3x=small AutoIt3 file exe=Standalone executable || exe&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_X64 || || Target exe filename for X64 compile. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Compression || || Compression parameter 0-4. 0=Low 2=normal 4=High. || 2&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UseUpx || (Y/N) || Compress output program. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UPX_Parameters || || Override the default setting for UPX. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Change2CUI || (Y/N) || Change output program to CUI in stead of GUI. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Compile_both || (Y/N) || Compile both X86 and X64 in one run. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Target Program Resource Info ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Comment || || Comment field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Description|| ||  Description field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Fileversion || || File Version || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_FileVersion_AutoIncrement || (Y/N/P) || AutoIncrement FileVersion After AUTEXE is finished. P=Prompt, Will ask at compilation time if you want to increase the version number || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_ProductVersion || || Product Version. || Default is the AutoIt3 version used.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Language || || Resource Language code. || 2057 which is English (United Kingdom)&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_LegalCopyright || || Copyright field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_requestedExecutionLevel || || asInvoker, highestAvailable, requireAdministrator or None (remove the trustInfo section). || Default is the setting from AUT2EXE - asInvoker.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_Compatibility || || Vista, Windows7 both allowed separated by a comma. ||  None&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Res_SaveSource || (Y/N) || Save a copy of the script source in the EXE resources.  If Y then the content of the script source depends on the #AutoIt3Wrapper_Run_Obfuscator and #obfuscator_parameters directives. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Add Extra Files to The Resources ===&lt;br /&gt;
&lt;br /&gt;
A maximum of fifteen free form resource fields.The following variables are available:&lt;br /&gt;
&lt;br /&gt;
%AutoItVer% = will be replaced with the version of AutoIt3&lt;br /&gt;
	&lt;br /&gt;
%date% = PC date in short date format&lt;br /&gt;
&lt;br /&gt;
%longdate% = PC date in long date format&lt;br /&gt;
&lt;br /&gt;
%time% = PC timeformat&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
&lt;br /&gt;
Add extra ICO files to the resources which can be used with TraySetIcon(@ScriptFullPath, 5) etc.&lt;br /&gt;
&lt;br /&gt;
list of filename of the Ico files to be added, First one will have number 5, then 6 etc.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_Icon_AddFilename[,LanguageCode] of ICO to be added.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_File_AddFilename[,Section [,ResName[,LanguageCode]]] to be added.&lt;br /&gt;
&lt;br /&gt;
== Tidy ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_Tidy || (Y/N)||  Run Tidy before compilation. || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Tidy_Stop_OnError || (Y/N) || Continue when only Warnings. || Y&lt;br /&gt;
|-&lt;br /&gt;
|  #Tidy_Parameters || || See the SciTE4AutoIt3 helpfile for options. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Stripper ==&lt;br /&gt;
&lt;br /&gt;
The directives used within the script to control Au3Stripper are as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_Run_Au3Stripper || (y/n) || Run Au3Stripper before compilation. || n&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Parameters || || Use the parameters as listed below. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Off ||  || Stop the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_On ||  || Start the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Funcs ||  || Do not Strip these functions. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Variables ||  || Do not Strip these variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Parameters&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| PreExpand ||  || Replace and reference to a Global Const variable with its actual value. || &lt;br /&gt;
|-&lt;br /&gt;
| StripOnly || (SF/SV) ||  || SV = 1&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedFunc ||  || Remove unused Funcs. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedVars ||  || Remove unused Global variable declarations. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripOnlyIncludes ||  || Same as /SO but leaves the main script untouched. ||&lt;br /&gt;
|-&lt;br /&gt;
| MergeOnly ||  || Will produce a scriptfile as AUT2EXE includes in the Compiled EXE. This allows you to find the proper linenumber when errors are reported. ||&lt;br /&gt;
|-&lt;br /&gt;
| RenameMinimum ||  || Generates a much smaller file by substituting function and variable names with unique 2+-character names. ||&lt;br /&gt;
|-&lt;br /&gt;
| ShowConsoleInfo || (0/1/9) || 0 = Minimal output to the console - only warnings and errors. 1 = Show more progress information 9 = Show all debug lines as found in the Au3Stripper.log. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Beta ||  || Use the ...\AutoIt\Beta\Include files if installed. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Check ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_AU3Check || (Y/N) || Run au3check before compilation. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Parameters || || Au3Check parameters ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Stop_OnWarning || (Y/N) || N=Continue on Warnings. || Y (Always stop on warnings.)&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_PlugIn_Funcs || || Define PlugIn function names separated by a comma to avoid AU3Check errors. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning || (Y/N/V) || Run versioning to update the script source. V=only run when fileversion is increased by #AutoIt3Wrapper_Res_FileVersion_AutoIncrement. || N&lt;br /&gt;
 |-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning_Parameters || || /NoPrompt: Will skip the Comments prompt /Comments: Text to added in the Comments. It can also contain the below variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Run Before And After Directives ==&lt;br /&gt;
&lt;br /&gt;
The following directives can contain: these variables&lt;br /&gt;
&lt;br /&gt;
%in% , %out%, %outx64%, %icon% which will be replaced by the fullpath\filename.&lt;br /&gt;
&lt;br /&gt;
%scriptdir% same as @ScriptDir and %scriptfile% = filename without extension.&lt;br /&gt;
&lt;br /&gt;
%fileversion% is the information from the #AutoIt3Wrapper_Res_Fileversion directive&lt;br /&gt;
&lt;br /&gt;
%scitedir% will be replaced by the SciTE program directory&lt;br /&gt;
&lt;br /&gt;
%autoitdir% will be replaced by the AutoIt3 program directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_Run_Before process to run before compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&lt;br /&gt;
#AutoIt3Wrapper_Run_After process to run after compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditional Directives ==&lt;br /&gt;
&lt;br /&gt;
Optional use this format for the supported directives to have seperate directive values for Run and Compile.&lt;br /&gt;
	&lt;br /&gt;
The GUI is not available when this format is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_If_Run&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=n&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=n&lt;br /&gt;
 #Tidy_Parameters=&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=n&lt;br /&gt;
#AutoIt3Wrapper_If_Compile&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=y&lt;br /&gt;
 #Tidy_Parameters=/gd /nsdp&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=y&lt;br /&gt;
#AutoIt3Wrapper_EndIf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14104</id>
		<title>AutoIt3Wrapper Directives</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt3Wrapper_Directives&amp;diff=14104"/>
		<updated>2019-10-20T17:52:20Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* AUT2EXE */ #AutoIt3Wrapper_Compression’s listed parameters required a space between “0-4” and “0=Low”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== List of AutoIt3Wrapper Directives ==&lt;br /&gt;
&lt;br /&gt;
This is a list of compiler directives used by AutoIt3Wrapper.exe and their descriptions.&lt;br /&gt;
&lt;br /&gt;
== AutoIt3 ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_testing || (Y/N) || Skip Tidy, Obfuscator and cvsWrapper for speed while testing. || N &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_UseX64 || (Y/N) || Use X64 versions for AutoIt3_x64 or AUT2EXE_x64. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Version || (B/P) || Use Beta or Production for AutoIt3 and AUT2EXE. || P&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_Debug_Mode || (Y/N) || Run Script with console debugging. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_Minimized || (Y/N) || Minimize SciTE while script is running. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Run_SciTE_OutputPane_Minimized || (Y/N) || Toggle SciTE output pane at run time so its not shown. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Autoit3Dir || || Optionally override the base AutoIt3 install directory. || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Aut2exe || || Optionally override the Aut2exe.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_AutoIt3 || || Optionally override the Autoit3.exe to use for this script || &lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Add_Constants || || Add the needed standard constant include files. Will only run one time. || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AUT2EXE ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Icon || || Filename of the Ico file to use ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile || || Target exe/a3x filename. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_Type || || a3x=small AutoIt3 file exe=Standalone executable || exe&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_OutFile_X64 || || Target exe filename for X64 compile. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Compression || || Compression parameter 0-4 0=Low 2=normal 4=High. || 2&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UseUpx || (Y/N) || Compress output program. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_UPX_Parameters || || Override the default setting for UPX. ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Change2CUI || (Y/N) || Change output program to CUI in stead of GUI. || N&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Compile_both || (Y/N) || Compile both X86 and X64 in one run. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Target Program Resource Info ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Comment || || Comment field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Description|| ||  Description field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Fileversion || || File Version || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_FileVersion_AutoIncrement || (Y/N/P) || AutoIncrement FileVersion After AUTEXE is finished. P=Prompt, Will ask at compilation time if you want to increase the version number || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_ProductVersion || || Product Version. || Default is the AutoIt3 version used.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_Language || || Resource Language code. || 2057 which is English (United Kingdom)&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Res_LegalCopyright || || Copyright field || &lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_requestedExecutionLevel || || asInvoker, highestAvailable, requireAdministrator or None (remove the trustInfo section). || Default is the setting from AUT2EXE - asInvoker.&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_res_Compatibility || || Vista, Windows7 both allowed separated by a comma. ||  None&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_Res_SaveSource || (Y/N) || Save a copy of the script source in the EXE resources.  If Y then the content of the script source depends on the #AutoIt3Wrapper_Run_Obfuscator and #obfuscator_parameters directives. || N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Add Extra Files to The Resources ===&lt;br /&gt;
&lt;br /&gt;
A maximum of fifteen free form resource fields.The following variables are available:&lt;br /&gt;
&lt;br /&gt;
%AutoItVer% = will be replaced with the version of AutoIt3&lt;br /&gt;
	&lt;br /&gt;
%date% = PC date in short date format&lt;br /&gt;
&lt;br /&gt;
%longdate% = PC date in long date format&lt;br /&gt;
&lt;br /&gt;
%time% = PC timeformat&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
  #AutoIt3Wrapper_Res_Field=Free format fieldname|fieldvalue&lt;br /&gt;
&lt;br /&gt;
Add extra ICO files to the resources which can be used with TraySetIcon(@ScriptFullPath, 5) etc.&lt;br /&gt;
&lt;br /&gt;
list of filename of the Ico files to be added, First one will have number 5, then 6 etc.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_Icon_AddFilename[,LanguageCode] of ICO to be added.&lt;br /&gt;
&lt;br /&gt;
  #AutoIt3Wrapper_Res_File_AddFilename[,Section [,ResName[,LanguageCode]]] to be added.&lt;br /&gt;
&lt;br /&gt;
== Tidy ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_Tidy || (Y/N)||  Run Tidy before compilation. || N&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Tidy_Stop_OnError || (Y/N) || Continue when only Warnings. || Y&lt;br /&gt;
|-&lt;br /&gt;
|  #Tidy_Parameters || || See the SciTE4AutoIt3 helpfile for options. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Stripper ==&lt;br /&gt;
&lt;br /&gt;
The directives used within the script to control Au3Stripper are as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| #AutoIt3Wrapper_Run_Au3Stripper || (y/n) || Run Au3Stripper before compilation. || n&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Parameters || || Use the parameters as listed below. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Off ||  || Stop the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_On ||  || Start the Stripping process below this line. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Funcs ||  || Do not Strip these functions. ||&lt;br /&gt;
|-&lt;br /&gt;
| #Au3Stripper_Ignore_Variables ||  || Do not Strip these variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Parameters&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
| PreExpand ||  || Replace and reference to a Global Const variable with its actual value. || &lt;br /&gt;
|-&lt;br /&gt;
| StripOnly || (SF/SV) ||  || SV = 1&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedFunc ||  || Remove unused Funcs. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripUnusedVars ||  || Remove unused Global variable declarations. || 0&lt;br /&gt;
|-&lt;br /&gt;
| StripOnlyIncludes ||  || Same as /SO but leaves the main script untouched. ||&lt;br /&gt;
|-&lt;br /&gt;
| MergeOnly ||  || Will produce a scriptfile as AUT2EXE includes in the Compiled EXE. This allows you to find the proper linenumber when errors are reported. ||&lt;br /&gt;
|-&lt;br /&gt;
| RenameMinimum ||  || Generates a much smaller file by substituting function and variable names with unique 2+-character names. ||&lt;br /&gt;
|-&lt;br /&gt;
| ShowConsoleInfo || (0/1/9) || 0 = Minimal output to the console - only warnings and errors. 1 = Show more progress information 9 = Show all debug lines as found in the Au3Stripper.log. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Beta ||  || Use the ...\AutoIt\Beta\Include files if installed. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AU3Check ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_Run_AU3Check || (Y/N) || Run au3check before compilation. || Y&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Parameters || || Au3Check parameters ||&lt;br /&gt;
|-&lt;br /&gt;
|   #AutoIt3Wrapper_AU3Check_Stop_OnWarning || (Y/N) || N=Continue on Warnings. || Y (Always stop on warnings.)&lt;br /&gt;
|-&lt;br /&gt;
|  #AutoIt3Wrapper_PlugIn_Funcs || || Define PlugIn function names separated by a comma to avoid AU3Check errors. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Directive &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Options &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Description &lt;br /&gt;
!! scope=&amp;quot;col&amp;quot; | Default&lt;br /&gt;
|-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning || (Y/N/V) || Run versioning to update the script source. V=only run when fileversion is increased by #AutoIt3Wrapper_Res_FileVersion_AutoIncrement. || N&lt;br /&gt;
 |-&lt;br /&gt;
 | #AutoIt3Wrapper_Versioning_Parameters || || /NoPrompt: Will skip the Comments prompt /Comments: Text to added in the Comments. It can also contain the below variables. ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Run Before And After Directives ==&lt;br /&gt;
&lt;br /&gt;
The following directives can contain: these variables&lt;br /&gt;
&lt;br /&gt;
%in% , %out%, %outx64%, %icon% which will be replaced by the fullpath\filename.&lt;br /&gt;
&lt;br /&gt;
%scriptdir% same as @ScriptDir and %scriptfile% = filename without extension.&lt;br /&gt;
&lt;br /&gt;
%fileversion% is the information from the #AutoIt3Wrapper_Res_Fileversion directive&lt;br /&gt;
&lt;br /&gt;
%scitedir% will be replaced by the SciTE program directory&lt;br /&gt;
&lt;br /&gt;
%autoitdir% will be replaced by the AutoIt3 program directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_Run_Before process to run before compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&lt;br /&gt;
#AutoIt3Wrapper_Run_After process to run after compilation.  &lt;br /&gt;
You can have multiple records that will be processed in sequence.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditional Directives ==&lt;br /&gt;
&lt;br /&gt;
Optional use this format for the supported directives to have seperate directive values for Run and Compile.&lt;br /&gt;
	&lt;br /&gt;
The GUI is not available when this format is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_If_Run&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=n&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=n&lt;br /&gt;
 #Tidy_Parameters=&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=n&lt;br /&gt;
#AutoIt3Wrapper_If_Compile&lt;br /&gt;
 #AutoIt3Wrapper_Run_AU3Check=y&lt;br /&gt;
 #AutoIt3Wrapper_Jump_To_First_Error=y&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6&lt;br /&gt;
 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y&lt;br /&gt;
 #AutoIt3Wrapper_Run_Tidy=y&lt;br /&gt;
 #Tidy_Parameters=/gd /nsdp&lt;br /&gt;
 #AutoIt3Wrapper_Tidy_Stop_onerror=y&lt;br /&gt;
#AutoIt3Wrapper_EndIf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=Best_coding_practices&amp;diff=14102</id>
		<title>Best coding practices</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=Best_coding_practices&amp;diff=14102"/>
		<updated>2019-10-17T01:18:52Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Enum */ Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Outlined in this section is a detailed explanation of what are to be considered the good coding practices within AutoIt. These recommendations are based on accepted coding practices common to a number of other programming languages. You do not need to follow them, but it is recommended that you do.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: You must use AutoIt v3.3.10.0 or above to run the examples below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Using Functions ==&lt;br /&gt;
If a function sets the @error flag, you should always check it before using a return value - if @error indicates an error then the function return value is generally undefined.&lt;br /&gt;
&lt;br /&gt;
Learn more about using Functions by reading &amp;quot;[https://www.autoitscript.com/autoit3/docs/function_notes.htm Function Notes]&amp;quot; from HelpFile.&lt;br /&gt;
&lt;br /&gt;
== Names of Variables ==&lt;br /&gt;
The variable naming convention used in AutoIt is based on [http://en.wikipedia.org/wiki/Hungarian_notation Hungarian notation]. The prefix defines the logical data type rather than the physical data type: in this way, it gives a hint as to what the variable&#039;s purpose is, or what it represents. The prefix does not encode the actual data type: this occurs during assignment. See the table below for accepted standards.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! prefix !! covering type !! example&lt;br /&gt;
|-&lt;br /&gt;
| a || Arrays || $aArray[0]&lt;br /&gt;
|-&lt;br /&gt;
| b || Booleans || $bBool = True&lt;br /&gt;
|-&lt;br /&gt;
| d || Binaries || $dBinary = Binary(&amp;quot;0x80000000&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| e || Constant variable || Local Const $eEulersConstant = 2.7182818284590452 &lt;br /&gt;
|-&lt;br /&gt;
| f || Floating point || $fFloat = 0.123&lt;br /&gt;
|-&lt;br /&gt;
| h || Handles (and GUI handles) || $hGUI = GUICreate(&amp;quot;My GUI&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| i || Integer || $iInteger = 10&lt;br /&gt;
|-&lt;br /&gt;
| id || An AutoIt controlID || $idButton_Ok = GUICtrlCreateButton(&amp;quot;OK&amp;quot;, 5, 5)&lt;br /&gt;
|-&lt;br /&gt;
| m || Maps || $mMap[]&lt;br /&gt;
|-&lt;br /&gt;
| n || General number (no preference) || $nNumber = 0&lt;br /&gt;
|-&lt;br /&gt;
| p || Pointers || $pRect = DllStructGetPtr($tRECT)&lt;br /&gt;
|-&lt;br /&gt;
| s || Strings (chars included) || $sString = &amp;quot;Hello world&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| t || Structures || $tSTRUCT = DllStructCreate($tagSTRUCT)&lt;br /&gt;
|-&lt;br /&gt;
| tag || Structures definition || $tagDATE = &amp;quot;struct; word Year;word Month;word Day; endstruct&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|v || Variant || $vData = ClipGet()&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Variables are named following this schema:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! dollar prefix !! type (lower case) !! [optional] subtype (lower case) !! var name (first letter in upper case)&lt;br /&gt;
|-&lt;br /&gt;
| $ || a || h || Handles&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Assign a local variable the integer 7&lt;br /&gt;
Local $iWeekDays = 7&lt;br /&gt;
&lt;br /&gt;
; Assign a local variable the value of Pi&lt;br /&gt;
Local $fPi = 3.14159265358979&lt;br /&gt;
&lt;br /&gt;
; Assign a local variable an array of strings&lt;br /&gt;
Local $asArray[7] = [&#039;mon&#039;, &#039;tue&#039;, &#039;wed&#039;, &#039;thu&#039;, &#039;fri&#039;, &#039;sat&#039;, &#039;sun&#039;]&lt;br /&gt;
&lt;br /&gt;
; Assign a local variable an array of numbers&lt;br /&gt;
Local $anArray[4] = [0, 0.25, 3 / 4, 12]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable Initialization ==&lt;br /&gt;
When initializing variables there are several points to consider. It is bad practice to hog memory by assigning data which is not immediately required. It is therefore recommended that you declare and initialize variables immediately prior to use. If you wish to assign a default value to a variable which you intend to overwrite later, then the data should be of the same (or the most logical representation of its) type and use as little memory as possible.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Inconsistent data types are considered bad&lt;br /&gt;
Local $iInteger = &amp;quot;0&amp;quot;&lt;br /&gt;
Local $sString = False&lt;br /&gt;
&lt;br /&gt;
; Correct initialization&lt;br /&gt;
Local $iInteger = 0&lt;br /&gt;
Local $sString = &#039;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the following table, recommended default values are shown for each data type. Some data types have more than one possibile default value which can be used for initialization.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Default Value !! covering type&lt;br /&gt;
|-&lt;br /&gt;
| Binary(&amp;quot;&amp;quot;) || $d&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;&amp;quot; || $s, $v&lt;br /&gt;
|-&lt;br /&gt;
| 0 || $a, $h, $i, $id, $m, $n, $o, $p, $t, $tag, $v&lt;br /&gt;
|-&lt;br /&gt;
| 0.0 || $f&lt;br /&gt;
|-&lt;br /&gt;
| Null || $o, $s, $v&lt;br /&gt;
|-&lt;br /&gt;
| False (or True) || $b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Declare and initialize a variable with the recommended default value&lt;br /&gt;
Local $vUndefined = Null ; This does not require much memory&lt;br /&gt;
&lt;br /&gt;
; Some time later:&lt;br /&gt;
$vUndefined = 0xB0AD1CEA ; Assign an appropriate value as and when needed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To reduce bloat, multiple variables can be declared on a single line. When declaring multiple variables on the same line, it is generally recommended that you stick to declaring one data type on each line. The intention here is to make the code easier to follow and manage in a future, however the best layout will vary according to circumstance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Not recommended&lt;br /&gt;
Local $sString = &amp;quot;&amp;quot;, $iInteger = 0, $asArray = [&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;] ; Mixed data types&lt;br /&gt;
&lt;br /&gt;
; Recommended&lt;br /&gt;
Local $iLeft = 10, $iTop = 10 ; Integers&lt;br /&gt;
Local $idButton_Go = GUICtrlCreateButton(&amp;quot;Go&amp;quot;, $iLeft, $iTop) ; ControlIds&lt;br /&gt;
Local $idButton_Quit = GUICtrlCreateButton(&amp;quot;Quit&amp;quot;, 50, 10) ; ControlIds&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some languages it is essential to initialize variables on declaration, but this is not the case with AutoIt. Regarding data type, variables declared without being initialized should be considered as being undefined.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scopes of Variables ==&lt;br /&gt;
Variables should also be named according to their scope.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Global UDF variable !! Global variable !! Local variable&lt;br /&gt;
|-&lt;br /&gt;
| $__g_iSomeVar || $g_iSomeVar || $iSomeVar&lt;br /&gt;
|}&lt;br /&gt;
With this method, you will avoid unwanted re-assignments.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Assign a Global variable the number 0&lt;br /&gt;
Global $iSomeVar1 = 0&lt;br /&gt;
; Assign a Global variable the number 5&lt;br /&gt;
Global $g_iSomeVar2 = 5&lt;br /&gt;
&lt;br /&gt;
SomeFunc()&lt;br /&gt;
&lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    ; Assign Local variables respectively the numbers 3 and 4&lt;br /&gt;
    Local $iSomeVar1 = 3, $iSomeVar2 = 4&lt;br /&gt;
&lt;br /&gt;
    ; Note: The user inadvertently re-assigned the global variable $iSomeVar1, because this one is not named as &amp;quot;global&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ; Display the value of $iSomeVar1&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $iSomeVar1: &amp;quot; &amp;amp; $iSomeVar1)&lt;br /&gt;
&lt;br /&gt;
    ; Display the value of $iSomeVar2&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $iSomeVar2: &amp;quot; &amp;amp; $iSomeVar2)&lt;br /&gt;
&lt;br /&gt;
    ; Display the value of $g_iSomeVar2&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $g_iSomeVar2: &amp;quot; &amp;amp; $g_iSomeVar2)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A variable declared globally (with the Global keyword) is visible anywhere in the script.&amp;lt;br /&amp;gt;Always declare your global variables in the global scope, not in a function. It will prevent another function from using it before its declaration and the declaration is implicit (see [[#jumpsec1|examples]]).&lt;br /&gt;
&lt;br /&gt;
* A variable declared locally (with the Local keyword), has a visibility which depends on the scope where it&#039;s declared.&lt;br /&gt;
:Declaration in the global scope: the variable is visible everywhere; declare it as Local if this one is only to be used in the same scope, i.e. outside of any functions. A variable declared as Local in the Global scope is still a Global variable, it&#039;s only for the sake of code clarity that you&#039;d use the Local declaration in the Global scope.&lt;br /&gt;
:Declaration in a function: the variable is visible by the function itself and nowhere else.&lt;br /&gt;
&lt;br /&gt;
Structure of a code scope:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Global scope&lt;br /&gt;
&lt;br /&gt;
; Include the Constants file, it contains various constants; it&#039;s needed here for the $MB_SYSTEMMODAL flag of the MsgBox function)&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; This scope is either Global or Local, depending on where you use the variables&lt;br /&gt;
&lt;br /&gt;
; Assign a Global variable the number 0 (which corresponds to an initialization of a variable number), its scope is Global because it&#039;s used in at least one function&lt;br /&gt;
Global $g_iVar1 = 0&lt;br /&gt;
&lt;br /&gt;
; Assign a Local variable the string &amp;quot;foo&amp;quot;, its scope is Local because its use is used only in this scope&lt;br /&gt;
Local $sVar2 = &amp;quot;foo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Display the content of $sVar2&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $sVar2: &amp;quot; &amp;amp; $sVar2)&lt;br /&gt;
&lt;br /&gt;
; Re-assign a Local variable the string returned by the function MyFunc&lt;br /&gt;
$sVar2 = MyFunc()&lt;br /&gt;
&lt;br /&gt;
; Re-Display the content of $sVar2&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $sVar2: &amp;quot; &amp;amp; $sVar2)&lt;br /&gt;
&lt;br /&gt;
; Declare a function (its main utility is described later in Functions, we can see one here which is to create a Local scope)&lt;br /&gt;
Func MyFunc()&lt;br /&gt;
    ; Local scope&lt;br /&gt;
&lt;br /&gt;
    ; Display the content of $g_iVar1&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $g_iVar1: &amp;quot; &amp;amp; $g_iVar1)&lt;br /&gt;
&lt;br /&gt;
    ; Assign a Local variable the string &amp;quot;bar&amp;quot;, its scope is Local because its use is restricted to the function&#039;s scope&lt;br /&gt;
    Local $sVar3 = &amp;quot;bar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ; Display the content of $sVar3&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $sVar3: &amp;quot; &amp;amp; $sVar3)&lt;br /&gt;
&lt;br /&gt;
    ; Return the $sVar3 content, it will be visible (if used) to the scope where the function is called&lt;br /&gt;
    Return $sVar3&lt;br /&gt;
EndFunc   ;==&amp;gt;MyFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concerning the Dim keyword, its recommended usage is limited to empty an existing array (Example 1) or to redeclare a function parameter (Example 2).&lt;br /&gt;
&lt;br /&gt;
Example 1:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Include the Array UDF, it&#039;s needed here for the _ArrayDisplay function&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
; Assign a Local variable an array containing numbers with a size of 5&lt;br /&gt;
; Note that an array is 0 based, so to access the first element the code is: $aiArray[0]&lt;br /&gt;
Local $aiArray[5] = [1, 2, 3, 4, 5]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aiArray)&lt;br /&gt;
 &lt;br /&gt;
; Empty the array (and keep its size)&lt;br /&gt;
Dim $aiArray[5]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aiArray)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Remark: The variable type of an emptied array is a string, every non initialized variable is a string.&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Call MyFunc with default parameters ($vParam1 = 0)&lt;br /&gt;
MyFunc()&lt;br /&gt;
&lt;br /&gt;
; Assign a Local variable an array containing integers&lt;br /&gt;
Local $aiArray[3] = [3, 4, 5]&lt;br /&gt;
; Call MyFunc with $aiArray as parameter ($vParam1 = $aiArray)&lt;br /&gt;
MyFunc($aiArray)&lt;br /&gt;
&lt;br /&gt;
Func MyFunc($vParam1 = 0)&lt;br /&gt;
    ; If $vParam1 is NOT an array then redeclare it to an array&lt;br /&gt;
    If Not IsArray($vParam1) Then&lt;br /&gt;
        Dim $vParam1[3] = [0, 1, 2]&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    ; Display the array&lt;br /&gt;
    _ArrayDisplay($vParam1)&lt;br /&gt;
EndFunc   ;==&amp;gt;MyFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for the ReDim keyword, limit its use to resize an array when you want to keep its content:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Include the Array UDF, it&#039;s needed here for the _ArrayDisplay function&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
; Assign a Local variable an array containing numbers with a size of 5&lt;br /&gt;
; Note than an array is 0 based, so to access the first element the code is: $aiArray[0]&lt;br /&gt;
Local $aArray[5] = [1, 2, 3, 4, 5]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aArray)&lt;br /&gt;
 &lt;br /&gt;
; Resize the array (and keep its content)&lt;br /&gt;
ReDim $aArray[3]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aArray)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Why using Dim over Local/Global is not always a good option:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Dim $g_vVariableThatIsGlobal = &amp;quot;This is a variable that has &amp;quot;&amp;quot;Program Scope&amp;quot;&amp;quot; aka Global.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;An example of why Dim can cause more problems than solve them.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
Example()&lt;br /&gt;
 &lt;br /&gt;
Func Example()&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, $g_vVariableThatIsGlobal) ; That looks alright to me as it displays the following text: This is a variable that has &amp;quot;Program Scope&amp;quot; aka Global&lt;br /&gt;
 &lt;br /&gt;
    Local $vReturn = SomeFunc() ; Call some random function&lt;br /&gt;
 &lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, $vReturn, $g_vVariableThatIsGlobal) ; The Global variable ($g_vVariableThatIsGlobal) changed because I totally forgot I had a duplicate variable name in &amp;quot;SomeFunc&amp;quot;&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
 &lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    ; This should create a variable in Local scope if the variable name doesn&amp;quot;t already exist&lt;br /&gt;
    ; For argument sake I totally forgot that I declared a variable already with the same name&lt;br /&gt;
    ; Well I only want this to be changed in the function and not the variable at the top of the script&lt;br /&gt;
    ; Should be OK right? Think again&lt;br /&gt;
    Dim $g_vVariableThatIsGlobal = &amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    For $i = 1 To 10&lt;br /&gt;
        $g_vVariableThatIsGlobal &amp;amp;= $i ; This will return 12345678910 totally wiping the previous contents of $g_vVariableThatIsGlobal&lt;br /&gt;
    Next&lt;br /&gt;
    Return $g_vVariableThatIsGlobal&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jumpsec1&amp;quot;&amp;gt;Declaring Global variables in a Function is never a good idea:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Calling Example() first will initialise the Global variable $g_vVariableThatIsGlobal and therefore calling SomeFunc() won&#039;t return an error&lt;br /&gt;
; Now look at Example 2&lt;br /&gt;
Example()&lt;br /&gt;
 &lt;br /&gt;
Func Example()&lt;br /&gt;
    ; Declaring a variable in a function can cause serious problems, hence why all Global variables should be declared at the top of a script&lt;br /&gt;
    Global $g_vVariableThatIsGlobal = &#039;This is a variable that has &#039;&#039;File Scope&#039;&#039; aka Global.&#039;&lt;br /&gt;
    SomeFunc()&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
 &lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $g_vVariableThatIsGlobal) ; As the variable was initialised this will not return an error&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Calling SomeFunc() first will bypass the Global variable $g_vVariableThatIsGlobal being initialised and therefore AutoIt has no idea of what data the variable&lt;br /&gt;
; $g_vVariableThatIsGlobal contains&lt;br /&gt;
SomeFunc()&lt;br /&gt;
 &lt;br /&gt;
Func Example()&lt;br /&gt;
    ; Declaring a variable in a function can cause serious problems, hence why all Global variables should be declared at the top of a script&lt;br /&gt;
    Global $g_vVariableThatIsGlobal = &#039;This is a variable that has &#039;&#039;File Scope&#039;&#039; aka Global.&#039;&lt;br /&gt;
    SomeFunc()&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
 &lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $g_vVariableThatIsGlobal) ; As the variable wasn&#039;t initialised this will return an error of &amp;quot;variable used without being declared.&amp;quot;&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declaring variables in loops (For, While, Do etc..) can have an affect on efficiency:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Declaring variables inside loops should be avoided as the variable is re-declared on each repetition&lt;br /&gt;
For $i = 1 To 10 ; $i is in &#039;loop scope.&#039;&lt;br /&gt;
    Local $iInt = $i&lt;br /&gt;
Next&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $iInt) ; This will display 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Declaring variables outside of loops is more efficient in the long run&lt;br /&gt;
Local $iInt = 0&lt;br /&gt;
For $i = 1 To 10 ; $i is in &#039;loop scope.&#039;&lt;br /&gt;
    $iInt = $i&lt;br /&gt;
Next&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $iInt) ; This will display 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is no requirement to declare the iteration count variable in a loop:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Correct&lt;br /&gt;
Local Const $iCount = 99&lt;br /&gt;
Local $aArray[$iCount]&lt;br /&gt;
For $i = 0 To UBound($iCount) - 1 ; $i is only used in the loop, so there is no requirement to declare it&lt;br /&gt;
    $aArray[$i] = $i&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
; Incorrect&lt;br /&gt;
Local Const $iCount = 99&lt;br /&gt;
Local $aArray[$iCount]&lt;br /&gt;
Local $i ; This is only used to store the iteration count value in the loop and therefore doesn&#039;t need to be declared. &lt;br /&gt;
For $i = 0 To UBound($iCount) - 1&lt;br /&gt;
    $aArray[$i] = $i&lt;br /&gt;
Next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As you can see, there is the Const keyword in the example, we are going to talk about it.&lt;br /&gt;
&lt;br /&gt;
== Const, Static, Enum ==&lt;br /&gt;
&lt;br /&gt;
=== Const ===&lt;br /&gt;
We won&#039;t talk about the advantages of using a constant variable, they are neglibible (for your information, an AutoIt constant variable is marked as read-only and remains a read-only variable when compiled).&lt;br /&gt;
&lt;br /&gt;
The Const keyword may be used first by some of you to avoid re-assignments.&lt;br /&gt;
The best way to use them is for real static values, meaning that these values won&#039;t change regardless of the instance of the program.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Not recommended&lt;br /&gt;
Local Const $hGUI = GUICreate(&amp;quot;MyGUI&amp;quot;)&lt;br /&gt;
; The handle of the window is unique, it&#039;s generated by Windows and changes&lt;br /&gt;
&lt;br /&gt;
; Recommended&lt;br /&gt;
Local Const $iMyAge = 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Static ===&lt;br /&gt;
Static variables are the solution to global variables being used in only one function.&lt;br /&gt;
e.g: Retain variable data once returned from a Function and only use that variable in that particular Function.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    SomeFunc() ; This will display a message box of 1, 1&lt;br /&gt;
    SomeFunc() ; This will display a message box of 1, 2&lt;br /&gt;
    SomeFunc() ; This will display a message box of 1, 3&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    ; This initialises a Static variable in Local scope. When a variable is declared just in Local scope (within a Function,)&lt;br /&gt;
    ; it&#039;s destroyed when the Function ends/returns. This isn&#039;t the case for a Static variable. Also, the variable can&#039;t be&lt;br /&gt;
    ; accessed from anywhere else in the script apart from the Function it was declared in&lt;br /&gt;
    Local Static $vVariableThatIsStatic = 0&lt;br /&gt;
    Local $vVariableThatIsLocal = 0&lt;br /&gt;
    $vVariableThatIsLocal += 1 ; This will always be 1 as it is destroyed once returned from SomeFunc&lt;br /&gt;
    $vVariableThatIsStatic += 1 ; This will increase by 1&lt;br /&gt;
    MsgBox(4096, $vVariableThatIsLocal, $vVariableThatIsStatic)&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enum ===&lt;br /&gt;
This statement is often practical in certain situations:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    ; Create variables in Local scope and enumerate through the variables. Default is to start from 0&lt;br /&gt;
    Local Enum $eCat, $eDog, $eMouse, $eHamster ; $eHamster is equal to the value 3, not 4&lt;br /&gt;
&lt;br /&gt;
    ; Create an array in Local scope with 4 elements&lt;br /&gt;
    Local $aAnimalNames[4]&lt;br /&gt;
&lt;br /&gt;
    ; Assign each array element with the name of the respective animal. For example the name of the cat is Jasper&lt;br /&gt;
    $aAnimalNames[$eCat] = &#039;Jasper&#039; ; $eCat is equal to 0, similar to using $aAnimalNames[0]&lt;br /&gt;
    $aAnimalNames[$eDog] = &#039;Beethoven&#039; ; $eDog is equal to 1, similar to using $aAnimalNames[1]&lt;br /&gt;
    $aAnimalNames[$eMouse] = &#039;Pinky&#039; ; $eMouse is equal to 2, similar to using $aAnimalNames[2]&lt;br /&gt;
    $aAnimalNames[$eHamster] = &#039;Fidget&#039; ; $eHamster is equal to 3, similar to using $aAnimalNames[3]&lt;br /&gt;
&lt;br /&gt;
    ; Display the values of the array&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &#039;&#039;, &#039;$aAnimalNames[$eCat] = &#039; &amp;amp; $aAnimalNames[$eCat] &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
            &#039;$aAnimalNames[$eDog] = &#039; &amp;amp; $aAnimalNames[$eDog] &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
            &#039;$aAnimalNames[$eMouse] = &#039; &amp;amp; $aAnimalNames[$eMouse] &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
            &#039;$aAnimalNames[$eHamster] = &#039; &amp;amp; $aAnimalNames[$eHamster] &amp;amp; @CRLF)&lt;br /&gt;
&lt;br /&gt;
    ; Sometimes using this approach for accessing an element is more practical than using a numerical value, due to the fact changing the index value of&lt;br /&gt;
    ; the enum constant has no effect on its position in the array. Therefore changing the location of $eCat in the array is as simple as changing the order&lt;br /&gt;
    ; it appears in the initial declaration e.g&lt;br /&gt;
&lt;br /&gt;
    ; Local Enum $eDog, $eMouse, $eCat, $eHamster&lt;br /&gt;
&lt;br /&gt;
    ; Now $eCat is the 2nd element in the array. If you were using numerical values, you would have to manually change all references of $aAnimalNames[0] to&lt;br /&gt;
    ; $aAnimalNames[2], as well as for the other elements which have now shifted&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Au3Check directive ==&lt;br /&gt;
As you may know (and we hope), the Au3Check tool checks your code for syntax errors, variables used without being declared etc. which is a good thing to fix your script.&lt;br /&gt;
&lt;br /&gt;
With the official custom directive used to check the helpfile examples/includes, you can apply the good coding practices listed above:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|Note: this directive is only used if you&#039;ve installed the full version of [https://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/download/SciTE4AutoIt3.exe Scite4AutoIt3]&lt;br /&gt;
&lt;br /&gt;
== Magic Numbers ==&lt;br /&gt;
Magic numbers are arbitrary numbers interspersed throughout a program&#039;s source code which do not have an associated identifier. The downside to this is not being able to derive a meaning from the number. &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
MsgBox(262144, &amp;quot;Magic Numbers&amp;quot;, &amp;quot;It&#039;s Adventure Time!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In this example, the magic number is 262144 with the identifier being $MB_TOPMOST according to the helpfile.&lt;br /&gt;
&lt;br /&gt;
The corrected example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
MsgBox($MB_TOPMOST, &amp;quot;Magic Numbers&amp;quot;, &amp;quot;It&#039;s Adventure Time!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Imagine you&#039;re a new user to AutoIt and you come across this code, where would you find -3, -4 or -5 in the help file?&lt;br /&gt;
; Since AutoIt is relatively a new concept to you, your first thought isn&#039;t to search through all the include files, I mean&lt;br /&gt;
; why would you, the help file is there for a reason&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    Local $hGUI = GUICreate(&#039;&#039;)&lt;br /&gt;
    GUICtrlCreateLabel(&#039;Why magic numbers are counter productive.&#039;, 5, 5)&lt;br /&gt;
    GUICtrlSetState(Default, 128) ; Does this hide, show or disable it?&lt;br /&gt;
    GUICtrlSetState(Default, 64) ; Does this hide, show or disable it?&lt;br /&gt;
    GUISetState(@SW_SHOW, $hGUI)&lt;br /&gt;
&lt;br /&gt;
    While 1&lt;br /&gt;
        Switch GUIGetMsg()&lt;br /&gt;
            Case -3 ; Doesn&#039;t really tell much about what it does&lt;br /&gt;
                ExitLoop&lt;br /&gt;
&lt;br /&gt;
            Case -4, -5 ; Again, no idea what these are. MouseMove? MouseClick? Restore?&lt;br /&gt;
                MsgBox(4096, &#039;&#039;, &#039;Do something when this action takes place.&#039;)&lt;br /&gt;
&lt;br /&gt;
        EndSwitch&lt;br /&gt;
    WEnd&lt;br /&gt;
&lt;br /&gt;
    GUIDelete($hGUI)&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Did you understand the numbers were these:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;GUIConstantsEx.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    Local $hGUI = GUICreate(&#039;&#039;)&lt;br /&gt;
    GUICtrlCreateLabel(&#039;Why magic numbers are counter productive.&#039;, 5, 5)&lt;br /&gt;
    GUICtrlSetState(Default, $GUI_DISABLE) ; Better, this is documented in the help file&lt;br /&gt;
    GUICtrlSetState(Default, $GUI_ENABLE) ; Better, this is documented in the help file&lt;br /&gt;
    GUISetState(@SW_SHOW, $hGUI)&lt;br /&gt;
&lt;br /&gt;
    While 1&lt;br /&gt;
        Switch GUIGetMsg()&lt;br /&gt;
            Case $GUI_EVENT_CLOSE ; Better, this is documented in the help file. Ah, it&#039;s the close action&lt;br /&gt;
                ExitLoop&lt;br /&gt;
&lt;br /&gt;
            Case $GUI_EVENT_MINIMIZE, $GUI_EVENT_RESTORE ; Better, this is documented in the help file&lt;br /&gt;
                MsgBox($MB_SYSTEMMODAL, &#039;&#039;, &#039;Do something when this action takes place.&#039;) &lt;br /&gt;
&lt;br /&gt;
        EndSwitch&lt;br /&gt;
    WEnd&lt;br /&gt;
&lt;br /&gt;
    GUIDelete($hGUI)&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Magic_number_(programming) Magic number (programming)]&lt;br /&gt;
&lt;br /&gt;
== Include-once directive ==&lt;br /&gt;
This one is designed for standard includes and UDFs, it&#039;s highly recommended to use it only for that.&lt;br /&gt;
&lt;br /&gt;
Those includes may be used in more than one file of your project because they are needed for some includes or your script itself.&lt;br /&gt;
In that case, the code would be duplicated, which is not a good thing especially if you have constants declared in those files, in so far as the constants cannot be redeclared/reassigned you will get error messages about trying to redeclare them; same thing for functions, you can&#039;t use a function name more than once.&lt;br /&gt;
&lt;br /&gt;
Put the directive at the top of your UDF (library) to avoid it from being included more than once :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include-once&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For discussion please visit: [http://www.autoitscript.com/forum/index.php?showtopic=146866 Forum: Good coding practices in AutoIt]&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=Best_coding_practices&amp;diff=14101</id>
		<title>Best coding practices</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=Best_coding_practices&amp;diff=14101"/>
		<updated>2019-10-17T01:17:32Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Enum */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Outlined in this section is a detailed explanation of what are to be considered the good coding practices within AutoIt. These recommendations are based on accepted coding practices common to a number of other programming languages. You do not need to follow them, but it is recommended that you do.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: You must use AutoIt v3.3.10.0 or above to run the examples below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Using Functions ==&lt;br /&gt;
If a function sets the @error flag, you should always check it before using a return value - if @error indicates an error then the function return value is generally undefined.&lt;br /&gt;
&lt;br /&gt;
Learn more about using Functions by reading &amp;quot;[https://www.autoitscript.com/autoit3/docs/function_notes.htm Function Notes]&amp;quot; from HelpFile.&lt;br /&gt;
&lt;br /&gt;
== Names of Variables ==&lt;br /&gt;
The variable naming convention used in AutoIt is based on [http://en.wikipedia.org/wiki/Hungarian_notation Hungarian notation]. The prefix defines the logical data type rather than the physical data type: in this way, it gives a hint as to what the variable&#039;s purpose is, or what it represents. The prefix does not encode the actual data type: this occurs during assignment. See the table below for accepted standards.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! prefix !! covering type !! example&lt;br /&gt;
|-&lt;br /&gt;
| a || Arrays || $aArray[0]&lt;br /&gt;
|-&lt;br /&gt;
| b || Booleans || $bBool = True&lt;br /&gt;
|-&lt;br /&gt;
| d || Binaries || $dBinary = Binary(&amp;quot;0x80000000&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| e || Constant variable || Local Const $eEulersConstant = 2.7182818284590452 &lt;br /&gt;
|-&lt;br /&gt;
| f || Floating point || $fFloat = 0.123&lt;br /&gt;
|-&lt;br /&gt;
| h || Handles (and GUI handles) || $hGUI = GUICreate(&amp;quot;My GUI&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| i || Integer || $iInteger = 10&lt;br /&gt;
|-&lt;br /&gt;
| id || An AutoIt controlID || $idButton_Ok = GUICtrlCreateButton(&amp;quot;OK&amp;quot;, 5, 5)&lt;br /&gt;
|-&lt;br /&gt;
| m || Maps || $mMap[]&lt;br /&gt;
|-&lt;br /&gt;
| n || General number (no preference) || $nNumber = 0&lt;br /&gt;
|-&lt;br /&gt;
| p || Pointers || $pRect = DllStructGetPtr($tRECT)&lt;br /&gt;
|-&lt;br /&gt;
| s || Strings (chars included) || $sString = &amp;quot;Hello world&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| t || Structures || $tSTRUCT = DllStructCreate($tagSTRUCT)&lt;br /&gt;
|-&lt;br /&gt;
| tag || Structures definition || $tagDATE = &amp;quot;struct; word Year;word Month;word Day; endstruct&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|v || Variant || $vData = ClipGet()&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Variables are named following this schema:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! dollar prefix !! type (lower case) !! [optional] subtype (lower case) !! var name (first letter in upper case)&lt;br /&gt;
|-&lt;br /&gt;
| $ || a || h || Handles&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Assign a local variable the integer 7&lt;br /&gt;
Local $iWeekDays = 7&lt;br /&gt;
&lt;br /&gt;
; Assign a local variable the value of Pi&lt;br /&gt;
Local $fPi = 3.14159265358979&lt;br /&gt;
&lt;br /&gt;
; Assign a local variable an array of strings&lt;br /&gt;
Local $asArray[7] = [&#039;mon&#039;, &#039;tue&#039;, &#039;wed&#039;, &#039;thu&#039;, &#039;fri&#039;, &#039;sat&#039;, &#039;sun&#039;]&lt;br /&gt;
&lt;br /&gt;
; Assign a local variable an array of numbers&lt;br /&gt;
Local $anArray[4] = [0, 0.25, 3 / 4, 12]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable Initialization ==&lt;br /&gt;
When initializing variables there are several points to consider. It is bad practice to hog memory by assigning data which is not immediately required. It is therefore recommended that you declare and initialize variables immediately prior to use. If you wish to assign a default value to a variable which you intend to overwrite later, then the data should be of the same (or the most logical representation of its) type and use as little memory as possible.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Inconsistent data types are considered bad&lt;br /&gt;
Local $iInteger = &amp;quot;0&amp;quot;&lt;br /&gt;
Local $sString = False&lt;br /&gt;
&lt;br /&gt;
; Correct initialization&lt;br /&gt;
Local $iInteger = 0&lt;br /&gt;
Local $sString = &#039;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the following table, recommended default values are shown for each data type. Some data types have more than one possibile default value which can be used for initialization.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Default Value !! covering type&lt;br /&gt;
|-&lt;br /&gt;
| Binary(&amp;quot;&amp;quot;) || $d&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;&amp;quot; || $s, $v&lt;br /&gt;
|-&lt;br /&gt;
| 0 || $a, $h, $i, $id, $m, $n, $o, $p, $t, $tag, $v&lt;br /&gt;
|-&lt;br /&gt;
| 0.0 || $f&lt;br /&gt;
|-&lt;br /&gt;
| Null || $o, $s, $v&lt;br /&gt;
|-&lt;br /&gt;
| False (or True) || $b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Declare and initialize a variable with the recommended default value&lt;br /&gt;
Local $vUndefined = Null ; This does not require much memory&lt;br /&gt;
&lt;br /&gt;
; Some time later:&lt;br /&gt;
$vUndefined = 0xB0AD1CEA ; Assign an appropriate value as and when needed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To reduce bloat, multiple variables can be declared on a single line. When declaring multiple variables on the same line, it is generally recommended that you stick to declaring one data type on each line. The intention here is to make the code easier to follow and manage in a future, however the best layout will vary according to circumstance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Not recommended&lt;br /&gt;
Local $sString = &amp;quot;&amp;quot;, $iInteger = 0, $asArray = [&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;] ; Mixed data types&lt;br /&gt;
&lt;br /&gt;
; Recommended&lt;br /&gt;
Local $iLeft = 10, $iTop = 10 ; Integers&lt;br /&gt;
Local $idButton_Go = GUICtrlCreateButton(&amp;quot;Go&amp;quot;, $iLeft, $iTop) ; ControlIds&lt;br /&gt;
Local $idButton_Quit = GUICtrlCreateButton(&amp;quot;Quit&amp;quot;, 50, 10) ; ControlIds&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some languages it is essential to initialize variables on declaration, but this is not the case with AutoIt. Regarding data type, variables declared without being initialized should be considered as being undefined.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scopes of Variables ==&lt;br /&gt;
Variables should also be named according to their scope.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Global UDF variable !! Global variable !! Local variable&lt;br /&gt;
|-&lt;br /&gt;
| $__g_iSomeVar || $g_iSomeVar || $iSomeVar&lt;br /&gt;
|}&lt;br /&gt;
With this method, you will avoid unwanted re-assignments.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Assign a Global variable the number 0&lt;br /&gt;
Global $iSomeVar1 = 0&lt;br /&gt;
; Assign a Global variable the number 5&lt;br /&gt;
Global $g_iSomeVar2 = 5&lt;br /&gt;
&lt;br /&gt;
SomeFunc()&lt;br /&gt;
&lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    ; Assign Local variables respectively the numbers 3 and 4&lt;br /&gt;
    Local $iSomeVar1 = 3, $iSomeVar2 = 4&lt;br /&gt;
&lt;br /&gt;
    ; Note: The user inadvertently re-assigned the global variable $iSomeVar1, because this one is not named as &amp;quot;global&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ; Display the value of $iSomeVar1&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $iSomeVar1: &amp;quot; &amp;amp; $iSomeVar1)&lt;br /&gt;
&lt;br /&gt;
    ; Display the value of $iSomeVar2&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $iSomeVar2: &amp;quot; &amp;amp; $iSomeVar2)&lt;br /&gt;
&lt;br /&gt;
    ; Display the value of $g_iSomeVar2&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $g_iSomeVar2: &amp;quot; &amp;amp; $g_iSomeVar2)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A variable declared globally (with the Global keyword) is visible anywhere in the script.&amp;lt;br /&amp;gt;Always declare your global variables in the global scope, not in a function. It will prevent another function from using it before its declaration and the declaration is implicit (see [[#jumpsec1|examples]]).&lt;br /&gt;
&lt;br /&gt;
* A variable declared locally (with the Local keyword), has a visibility which depends on the scope where it&#039;s declared.&lt;br /&gt;
:Declaration in the global scope: the variable is visible everywhere; declare it as Local if this one is only to be used in the same scope, i.e. outside of any functions. A variable declared as Local in the Global scope is still a Global variable, it&#039;s only for the sake of code clarity that you&#039;d use the Local declaration in the Global scope.&lt;br /&gt;
:Declaration in a function: the variable is visible by the function itself and nowhere else.&lt;br /&gt;
&lt;br /&gt;
Structure of a code scope:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Global scope&lt;br /&gt;
&lt;br /&gt;
; Include the Constants file, it contains various constants; it&#039;s needed here for the $MB_SYSTEMMODAL flag of the MsgBox function)&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; This scope is either Global or Local, depending on where you use the variables&lt;br /&gt;
&lt;br /&gt;
; Assign a Global variable the number 0 (which corresponds to an initialization of a variable number), its scope is Global because it&#039;s used in at least one function&lt;br /&gt;
Global $g_iVar1 = 0&lt;br /&gt;
&lt;br /&gt;
; Assign a Local variable the string &amp;quot;foo&amp;quot;, its scope is Local because its use is used only in this scope&lt;br /&gt;
Local $sVar2 = &amp;quot;foo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Display the content of $sVar2&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $sVar2: &amp;quot; &amp;amp; $sVar2)&lt;br /&gt;
&lt;br /&gt;
; Re-assign a Local variable the string returned by the function MyFunc&lt;br /&gt;
$sVar2 = MyFunc()&lt;br /&gt;
&lt;br /&gt;
; Re-Display the content of $sVar2&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $sVar2: &amp;quot; &amp;amp; $sVar2)&lt;br /&gt;
&lt;br /&gt;
; Declare a function (its main utility is described later in Functions, we can see one here which is to create a Local scope)&lt;br /&gt;
Func MyFunc()&lt;br /&gt;
    ; Local scope&lt;br /&gt;
&lt;br /&gt;
    ; Display the content of $g_iVar1&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $g_iVar1: &amp;quot; &amp;amp; $g_iVar1)&lt;br /&gt;
&lt;br /&gt;
    ; Assign a Local variable the string &amp;quot;bar&amp;quot;, its scope is Local because its use is restricted to the function&#039;s scope&lt;br /&gt;
    Local $sVar3 = &amp;quot;bar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ; Display the content of $sVar3&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $sVar3: &amp;quot; &amp;amp; $sVar3)&lt;br /&gt;
&lt;br /&gt;
    ; Return the $sVar3 content, it will be visible (if used) to the scope where the function is called&lt;br /&gt;
    Return $sVar3&lt;br /&gt;
EndFunc   ;==&amp;gt;MyFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concerning the Dim keyword, its recommended usage is limited to empty an existing array (Example 1) or to redeclare a function parameter (Example 2).&lt;br /&gt;
&lt;br /&gt;
Example 1:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Include the Array UDF, it&#039;s needed here for the _ArrayDisplay function&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
; Assign a Local variable an array containing numbers with a size of 5&lt;br /&gt;
; Note that an array is 0 based, so to access the first element the code is: $aiArray[0]&lt;br /&gt;
Local $aiArray[5] = [1, 2, 3, 4, 5]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aiArray)&lt;br /&gt;
 &lt;br /&gt;
; Empty the array (and keep its size)&lt;br /&gt;
Dim $aiArray[5]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aiArray)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Remark: The variable type of an emptied array is a string, every non initialized variable is a string.&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Call MyFunc with default parameters ($vParam1 = 0)&lt;br /&gt;
MyFunc()&lt;br /&gt;
&lt;br /&gt;
; Assign a Local variable an array containing integers&lt;br /&gt;
Local $aiArray[3] = [3, 4, 5]&lt;br /&gt;
; Call MyFunc with $aiArray as parameter ($vParam1 = $aiArray)&lt;br /&gt;
MyFunc($aiArray)&lt;br /&gt;
&lt;br /&gt;
Func MyFunc($vParam1 = 0)&lt;br /&gt;
    ; If $vParam1 is NOT an array then redeclare it to an array&lt;br /&gt;
    If Not IsArray($vParam1) Then&lt;br /&gt;
        Dim $vParam1[3] = [0, 1, 2]&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    ; Display the array&lt;br /&gt;
    _ArrayDisplay($vParam1)&lt;br /&gt;
EndFunc   ;==&amp;gt;MyFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for the ReDim keyword, limit its use to resize an array when you want to keep its content:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Include the Array UDF, it&#039;s needed here for the _ArrayDisplay function&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
; Assign a Local variable an array containing numbers with a size of 5&lt;br /&gt;
; Note than an array is 0 based, so to access the first element the code is: $aiArray[0]&lt;br /&gt;
Local $aArray[5] = [1, 2, 3, 4, 5]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aArray)&lt;br /&gt;
 &lt;br /&gt;
; Resize the array (and keep its content)&lt;br /&gt;
ReDim $aArray[3]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aArray)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Why using Dim over Local/Global is not always a good option:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Dim $g_vVariableThatIsGlobal = &amp;quot;This is a variable that has &amp;quot;&amp;quot;Program Scope&amp;quot;&amp;quot; aka Global.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;An example of why Dim can cause more problems than solve them.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
Example()&lt;br /&gt;
 &lt;br /&gt;
Func Example()&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, $g_vVariableThatIsGlobal) ; That looks alright to me as it displays the following text: This is a variable that has &amp;quot;Program Scope&amp;quot; aka Global&lt;br /&gt;
 &lt;br /&gt;
    Local $vReturn = SomeFunc() ; Call some random function&lt;br /&gt;
 &lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, $vReturn, $g_vVariableThatIsGlobal) ; The Global variable ($g_vVariableThatIsGlobal) changed because I totally forgot I had a duplicate variable name in &amp;quot;SomeFunc&amp;quot;&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
 &lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    ; This should create a variable in Local scope if the variable name doesn&amp;quot;t already exist&lt;br /&gt;
    ; For argument sake I totally forgot that I declared a variable already with the same name&lt;br /&gt;
    ; Well I only want this to be changed in the function and not the variable at the top of the script&lt;br /&gt;
    ; Should be OK right? Think again&lt;br /&gt;
    Dim $g_vVariableThatIsGlobal = &amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    For $i = 1 To 10&lt;br /&gt;
        $g_vVariableThatIsGlobal &amp;amp;= $i ; This will return 12345678910 totally wiping the previous contents of $g_vVariableThatIsGlobal&lt;br /&gt;
    Next&lt;br /&gt;
    Return $g_vVariableThatIsGlobal&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jumpsec1&amp;quot;&amp;gt;Declaring Global variables in a Function is never a good idea:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Calling Example() first will initialise the Global variable $g_vVariableThatIsGlobal and therefore calling SomeFunc() won&#039;t return an error&lt;br /&gt;
; Now look at Example 2&lt;br /&gt;
Example()&lt;br /&gt;
 &lt;br /&gt;
Func Example()&lt;br /&gt;
    ; Declaring a variable in a function can cause serious problems, hence why all Global variables should be declared at the top of a script&lt;br /&gt;
    Global $g_vVariableThatIsGlobal = &#039;This is a variable that has &#039;&#039;File Scope&#039;&#039; aka Global.&#039;&lt;br /&gt;
    SomeFunc()&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
 &lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $g_vVariableThatIsGlobal) ; As the variable was initialised this will not return an error&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Calling SomeFunc() first will bypass the Global variable $g_vVariableThatIsGlobal being initialised and therefore AutoIt has no idea of what data the variable&lt;br /&gt;
; $g_vVariableThatIsGlobal contains&lt;br /&gt;
SomeFunc()&lt;br /&gt;
 &lt;br /&gt;
Func Example()&lt;br /&gt;
    ; Declaring a variable in a function can cause serious problems, hence why all Global variables should be declared at the top of a script&lt;br /&gt;
    Global $g_vVariableThatIsGlobal = &#039;This is a variable that has &#039;&#039;File Scope&#039;&#039; aka Global.&#039;&lt;br /&gt;
    SomeFunc()&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
 &lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $g_vVariableThatIsGlobal) ; As the variable wasn&#039;t initialised this will return an error of &amp;quot;variable used without being declared.&amp;quot;&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declaring variables in loops (For, While, Do etc..) can have an affect on efficiency:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Declaring variables inside loops should be avoided as the variable is re-declared on each repetition&lt;br /&gt;
For $i = 1 To 10 ; $i is in &#039;loop scope.&#039;&lt;br /&gt;
    Local $iInt = $i&lt;br /&gt;
Next&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $iInt) ; This will display 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Declaring variables outside of loops is more efficient in the long run&lt;br /&gt;
Local $iInt = 0&lt;br /&gt;
For $i = 1 To 10 ; $i is in &#039;loop scope.&#039;&lt;br /&gt;
    $iInt = $i&lt;br /&gt;
Next&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $iInt) ; This will display 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is no requirement to declare the iteration count variable in a loop:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Correct&lt;br /&gt;
Local Const $iCount = 99&lt;br /&gt;
Local $aArray[$iCount]&lt;br /&gt;
For $i = 0 To UBound($iCount) - 1 ; $i is only used in the loop, so there is no requirement to declare it&lt;br /&gt;
    $aArray[$i] = $i&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
; Incorrect&lt;br /&gt;
Local Const $iCount = 99&lt;br /&gt;
Local $aArray[$iCount]&lt;br /&gt;
Local $i ; This is only used to store the iteration count value in the loop and therefore doesn&#039;t need to be declared. &lt;br /&gt;
For $i = 0 To UBound($iCount) - 1&lt;br /&gt;
    $aArray[$i] = $i&lt;br /&gt;
Next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As you can see, there is the Const keyword in the example, we are going to talk about it.&lt;br /&gt;
&lt;br /&gt;
== Const, Static, Enum ==&lt;br /&gt;
&lt;br /&gt;
=== Const ===&lt;br /&gt;
We won&#039;t talk about the advantages of using a constant variable, they are neglibible (for your information, an AutoIt constant variable is marked as read-only and remains a read-only variable when compiled).&lt;br /&gt;
&lt;br /&gt;
The Const keyword may be used first by some of you to avoid re-assignments.&lt;br /&gt;
The best way to use them is for real static values, meaning that these values won&#039;t change regardless of the instance of the program.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Not recommended&lt;br /&gt;
Local Const $hGUI = GUICreate(&amp;quot;MyGUI&amp;quot;)&lt;br /&gt;
; The handle of the window is unique, it&#039;s generated by Windows and changes&lt;br /&gt;
&lt;br /&gt;
; Recommended&lt;br /&gt;
Local Const $iMyAge = 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Static ===&lt;br /&gt;
Static variables are the solution to global variables being used in only one function.&lt;br /&gt;
e.g: Retain variable data once returned from a Function and only use that variable in that particular Function.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    SomeFunc() ; This will display a message box of 1, 1&lt;br /&gt;
    SomeFunc() ; This will display a message box of 1, 2&lt;br /&gt;
    SomeFunc() ; This will display a message box of 1, 3&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    ; This initialises a Static variable in Local scope. When a variable is declared just in Local scope (within a Function,)&lt;br /&gt;
    ; it&#039;s destroyed when the Function ends/returns. This isn&#039;t the case for a Static variable. Also, the variable can&#039;t be&lt;br /&gt;
    ; accessed from anywhere else in the script apart from the Function it was declared in&lt;br /&gt;
    Local Static $vVariableThatIsStatic = 0&lt;br /&gt;
    Local $vVariableThatIsLocal = 0&lt;br /&gt;
    $vVariableThatIsLocal += 1 ; This will always be 1 as it is destroyed once returned from SomeFunc&lt;br /&gt;
    $vVariableThatIsStatic += 1 ; This will increase by 1&lt;br /&gt;
    MsgBox(4096, $vVariableThatIsLocal, $vVariableThatIsStatic)&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enum ===&lt;br /&gt;
This statement is often practical in certain situations:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    ; Create variables in Local scope and enumerate through the variables. Default is to start from 0&lt;br /&gt;
    Local Enum $eCat, $eDog, $eMouse, $eHamster ; $eHamster is equal to the value 3, not 4&lt;br /&gt;
&lt;br /&gt;
    ; Create an array in Local scope with 4 elements&lt;br /&gt;
    Local $aAnimalNames[4]&lt;br /&gt;
&lt;br /&gt;
    ; Assign each array element with the name of the respective animal. For example the name of the cat is Jasper&lt;br /&gt;
    $aAnimalNames[$eCat] = &#039;Jasper&#039; ; $eCat is equal to 0, similar to using $aAnimalNames[0]&lt;br /&gt;
    $aAnimalNames[$eDog] = &#039;Beethoven&#039; ; $eDog is equal to 1, similar to using $aAnimalNames[1]&lt;br /&gt;
    $aAnimalNames[$eMouse] = &#039;Pinky&#039; ; $eMouse is equal to 2, similar to using $aAnimalNames[2]&lt;br /&gt;
    $aAnimalNames[$eHamster] = &#039;Fidget&#039; ; $eHamster is equal to 3, similar to using $aAnimalNames[3]&lt;br /&gt;
&lt;br /&gt;
    ; Display the values of the array&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &#039;&#039;, &#039;$aAnimalNames[$eCat] = &#039; &amp;amp; $aAnimalNames[$eCat] &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
            &#039;$aAnimalNames[$eDog] = &#039; &amp;amp; $aAnimalNames[$eDog] &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
            &#039;$aAnimalNames[$eMouse] = &#039; &amp;amp; $aAnimalNames[$eMouse] &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
            &#039;$aAnimalNames[$eHamster] = &#039; &amp;amp; $aAnimalNames[$eHamster] &amp;amp; @CRLF)&lt;br /&gt;
&lt;br /&gt;
    ; Sometimes using this approach for accessing an element is more practical than using a numerical value, due to the fact changing the index value of&lt;br /&gt;
    ; the enum constant has no affect on its position in the array. Therefore changing the location of $eCat in the array is as simple as changing the order&lt;br /&gt;
    ; it appears in the initial declaration e.g&lt;br /&gt;
&lt;br /&gt;
    ; Local Enum $eDog, $eMouse, $eCat, $eHamster&lt;br /&gt;
&lt;br /&gt;
    ; Now $eCat is the 2nd element in the array. If you were using numerical values, you would have to manually change all references of $aAnimalNames[0] to&lt;br /&gt;
    ; $aAnimalNames[2], as well as for the other elements which have now shifted&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Au3Check directive ==&lt;br /&gt;
As you may know (and we hope), the Au3Check tool checks your code for syntax errors, variables used without being declared etc. which is a good thing to fix your script.&lt;br /&gt;
&lt;br /&gt;
With the official custom directive used to check the helpfile examples/includes, you can apply the good coding practices listed above:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|Note: this directive is only used if you&#039;ve installed the full version of [https://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/download/SciTE4AutoIt3.exe Scite4AutoIt3]&lt;br /&gt;
&lt;br /&gt;
== Magic Numbers ==&lt;br /&gt;
Magic numbers are arbitrary numbers interspersed throughout a program&#039;s source code which do not have an associated identifier. The downside to this is not being able to derive a meaning from the number. &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
MsgBox(262144, &amp;quot;Magic Numbers&amp;quot;, &amp;quot;It&#039;s Adventure Time!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In this example, the magic number is 262144 with the identifier being $MB_TOPMOST according to the helpfile.&lt;br /&gt;
&lt;br /&gt;
The corrected example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
MsgBox($MB_TOPMOST, &amp;quot;Magic Numbers&amp;quot;, &amp;quot;It&#039;s Adventure Time!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Imagine you&#039;re a new user to AutoIt and you come across this code, where would you find -3, -4 or -5 in the help file?&lt;br /&gt;
; Since AutoIt is relatively a new concept to you, your first thought isn&#039;t to search through all the include files, I mean&lt;br /&gt;
; why would you, the help file is there for a reason&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    Local $hGUI = GUICreate(&#039;&#039;)&lt;br /&gt;
    GUICtrlCreateLabel(&#039;Why magic numbers are counter productive.&#039;, 5, 5)&lt;br /&gt;
    GUICtrlSetState(Default, 128) ; Does this hide, show or disable it?&lt;br /&gt;
    GUICtrlSetState(Default, 64) ; Does this hide, show or disable it?&lt;br /&gt;
    GUISetState(@SW_SHOW, $hGUI)&lt;br /&gt;
&lt;br /&gt;
    While 1&lt;br /&gt;
        Switch GUIGetMsg()&lt;br /&gt;
            Case -3 ; Doesn&#039;t really tell much about what it does&lt;br /&gt;
                ExitLoop&lt;br /&gt;
&lt;br /&gt;
            Case -4, -5 ; Again, no idea what these are. MouseMove? MouseClick? Restore?&lt;br /&gt;
                MsgBox(4096, &#039;&#039;, &#039;Do something when this action takes place.&#039;)&lt;br /&gt;
&lt;br /&gt;
        EndSwitch&lt;br /&gt;
    WEnd&lt;br /&gt;
&lt;br /&gt;
    GUIDelete($hGUI)&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Did you understand the numbers were these:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;GUIConstantsEx.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    Local $hGUI = GUICreate(&#039;&#039;)&lt;br /&gt;
    GUICtrlCreateLabel(&#039;Why magic numbers are counter productive.&#039;, 5, 5)&lt;br /&gt;
    GUICtrlSetState(Default, $GUI_DISABLE) ; Better, this is documented in the help file&lt;br /&gt;
    GUICtrlSetState(Default, $GUI_ENABLE) ; Better, this is documented in the help file&lt;br /&gt;
    GUISetState(@SW_SHOW, $hGUI)&lt;br /&gt;
&lt;br /&gt;
    While 1&lt;br /&gt;
        Switch GUIGetMsg()&lt;br /&gt;
            Case $GUI_EVENT_CLOSE ; Better, this is documented in the help file. Ah, it&#039;s the close action&lt;br /&gt;
                ExitLoop&lt;br /&gt;
&lt;br /&gt;
            Case $GUI_EVENT_MINIMIZE, $GUI_EVENT_RESTORE ; Better, this is documented in the help file&lt;br /&gt;
                MsgBox($MB_SYSTEMMODAL, &#039;&#039;, &#039;Do something when this action takes place.&#039;) &lt;br /&gt;
&lt;br /&gt;
        EndSwitch&lt;br /&gt;
    WEnd&lt;br /&gt;
&lt;br /&gt;
    GUIDelete($hGUI)&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Magic_number_(programming) Magic number (programming)]&lt;br /&gt;
&lt;br /&gt;
== Include-once directive ==&lt;br /&gt;
This one is designed for standard includes and UDFs, it&#039;s highly recommended to use it only for that.&lt;br /&gt;
&lt;br /&gt;
Those includes may be used in more than one file of your project because they are needed for some includes or your script itself.&lt;br /&gt;
In that case, the code would be duplicated, which is not a good thing especially if you have constants declared in those files, in so far as the constants cannot be redeclared/reassigned you will get error messages about trying to redeclare them; same thing for functions, you can&#039;t use a function name more than once.&lt;br /&gt;
&lt;br /&gt;
Put the directive at the top of your UDF (library) to avoid it from being included more than once :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include-once&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For discussion please visit: [http://www.autoitscript.com/forum/index.php?showtopic=146866 Forum: Good coding practices in AutoIt]&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=Best_coding_practices&amp;diff=14100</id>
		<title>Best coding practices</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=Best_coding_practices&amp;diff=14100"/>
		<updated>2019-10-16T23:37:59Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Scopes of Variables */ Minor typos and punctuation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Outlined in this section is a detailed explanation of what are to be considered the good coding practices within AutoIt. These recommendations are based on accepted coding practices common to a number of other programming languages. You do not need to follow them, but it is recommended that you do.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: You must use AutoIt v3.3.10.0 or above to run the examples below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Using Functions ==&lt;br /&gt;
If a function sets the @error flag, you should always check it before using a return value - if @error indicates an error then the function return value is generally undefined.&lt;br /&gt;
&lt;br /&gt;
Learn more about using Functions by reading &amp;quot;[https://www.autoitscript.com/autoit3/docs/function_notes.htm Function Notes]&amp;quot; from HelpFile.&lt;br /&gt;
&lt;br /&gt;
== Names of Variables ==&lt;br /&gt;
The variable naming convention used in AutoIt is based on [http://en.wikipedia.org/wiki/Hungarian_notation Hungarian notation]. The prefix defines the logical data type rather than the physical data type: in this way, it gives a hint as to what the variable&#039;s purpose is, or what it represents. The prefix does not encode the actual data type: this occurs during assignment. See the table below for accepted standards.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! prefix !! covering type !! example&lt;br /&gt;
|-&lt;br /&gt;
| a || Arrays || $aArray[0]&lt;br /&gt;
|-&lt;br /&gt;
| b || Booleans || $bBool = True&lt;br /&gt;
|-&lt;br /&gt;
| d || Binaries || $dBinary = Binary(&amp;quot;0x80000000&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| e || Constant variable || Local Const $eEulersConstant = 2.7182818284590452 &lt;br /&gt;
|-&lt;br /&gt;
| f || Floating point || $fFloat = 0.123&lt;br /&gt;
|-&lt;br /&gt;
| h || Handles (and GUI handles) || $hGUI = GUICreate(&amp;quot;My GUI&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| i || Integer || $iInteger = 10&lt;br /&gt;
|-&lt;br /&gt;
| id || An AutoIt controlID || $idButton_Ok = GUICtrlCreateButton(&amp;quot;OK&amp;quot;, 5, 5)&lt;br /&gt;
|-&lt;br /&gt;
| m || Maps || $mMap[]&lt;br /&gt;
|-&lt;br /&gt;
| n || General number (no preference) || $nNumber = 0&lt;br /&gt;
|-&lt;br /&gt;
| p || Pointers || $pRect = DllStructGetPtr($tRECT)&lt;br /&gt;
|-&lt;br /&gt;
| s || Strings (chars included) || $sString = &amp;quot;Hello world&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| t || Structures || $tSTRUCT = DllStructCreate($tagSTRUCT)&lt;br /&gt;
|-&lt;br /&gt;
| tag || Structures definition || $tagDATE = &amp;quot;struct; word Year;word Month;word Day; endstruct&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|v || Variant || $vData = ClipGet()&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Variables are named following this schema:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! dollar prefix !! type (lower case) !! [optional] subtype (lower case) !! var name (first letter in upper case)&lt;br /&gt;
|-&lt;br /&gt;
| $ || a || h || Handles&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Assign a local variable the integer 7&lt;br /&gt;
Local $iWeekDays = 7&lt;br /&gt;
&lt;br /&gt;
; Assign a local variable the value of Pi&lt;br /&gt;
Local $fPi = 3.14159265358979&lt;br /&gt;
&lt;br /&gt;
; Assign a local variable an array of strings&lt;br /&gt;
Local $asArray[7] = [&#039;mon&#039;, &#039;tue&#039;, &#039;wed&#039;, &#039;thu&#039;, &#039;fri&#039;, &#039;sat&#039;, &#039;sun&#039;]&lt;br /&gt;
&lt;br /&gt;
; Assign a local variable an array of numbers&lt;br /&gt;
Local $anArray[4] = [0, 0.25, 3 / 4, 12]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable Initialization ==&lt;br /&gt;
When initializing variables there are several points to consider. It is bad practice to hog memory by assigning data which is not immediately required. It is therefore recommended that you declare and initialize variables immediately prior to use. If you wish to assign a default value to a variable which you intend to overwrite later, then the data should be of the same (or the most logical representation of its) type and use as little memory as possible.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Inconsistent data types are considered bad&lt;br /&gt;
Local $iInteger = &amp;quot;0&amp;quot;&lt;br /&gt;
Local $sString = False&lt;br /&gt;
&lt;br /&gt;
; Correct initialization&lt;br /&gt;
Local $iInteger = 0&lt;br /&gt;
Local $sString = &#039;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the following table, recommended default values are shown for each data type. Some data types have more than one possibile default value which can be used for initialization.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Default Value !! covering type&lt;br /&gt;
|-&lt;br /&gt;
| Binary(&amp;quot;&amp;quot;) || $d&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;&amp;quot; || $s, $v&lt;br /&gt;
|-&lt;br /&gt;
| 0 || $a, $h, $i, $id, $m, $n, $o, $p, $t, $tag, $v&lt;br /&gt;
|-&lt;br /&gt;
| 0.0 || $f&lt;br /&gt;
|-&lt;br /&gt;
| Null || $o, $s, $v&lt;br /&gt;
|-&lt;br /&gt;
| False (or True) || $b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Declare and initialize a variable with the recommended default value&lt;br /&gt;
Local $vUndefined = Null ; This does not require much memory&lt;br /&gt;
&lt;br /&gt;
; Some time later:&lt;br /&gt;
$vUndefined = 0xB0AD1CEA ; Assign an appropriate value as and when needed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To reduce bloat, multiple variables can be declared on a single line. When declaring multiple variables on the same line, it is generally recommended that you stick to declaring one data type on each line. The intention here is to make the code easier to follow and manage in a future, however the best layout will vary according to circumstance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Not recommended&lt;br /&gt;
Local $sString = &amp;quot;&amp;quot;, $iInteger = 0, $asArray = [&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;] ; Mixed data types&lt;br /&gt;
&lt;br /&gt;
; Recommended&lt;br /&gt;
Local $iLeft = 10, $iTop = 10 ; Integers&lt;br /&gt;
Local $idButton_Go = GUICtrlCreateButton(&amp;quot;Go&amp;quot;, $iLeft, $iTop) ; ControlIds&lt;br /&gt;
Local $idButton_Quit = GUICtrlCreateButton(&amp;quot;Quit&amp;quot;, 50, 10) ; ControlIds&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some languages it is essential to initialize variables on declaration, but this is not the case with AutoIt. Regarding data type, variables declared without being initialized should be considered as being undefined.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scopes of Variables ==&lt;br /&gt;
Variables should also be named according to their scope.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Global UDF variable !! Global variable !! Local variable&lt;br /&gt;
|-&lt;br /&gt;
| $__g_iSomeVar || $g_iSomeVar || $iSomeVar&lt;br /&gt;
|}&lt;br /&gt;
With this method, you will avoid unwanted re-assignments.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Assign a Global variable the number 0&lt;br /&gt;
Global $iSomeVar1 = 0&lt;br /&gt;
; Assign a Global variable the number 5&lt;br /&gt;
Global $g_iSomeVar2 = 5&lt;br /&gt;
&lt;br /&gt;
SomeFunc()&lt;br /&gt;
&lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    ; Assign Local variables respectively the numbers 3 and 4&lt;br /&gt;
    Local $iSomeVar1 = 3, $iSomeVar2 = 4&lt;br /&gt;
&lt;br /&gt;
    ; Note: The user inadvertently re-assigned the global variable $iSomeVar1, because this one is not named as &amp;quot;global&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ; Display the value of $iSomeVar1&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $iSomeVar1: &amp;quot; &amp;amp; $iSomeVar1)&lt;br /&gt;
&lt;br /&gt;
    ; Display the value of $iSomeVar2&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $iSomeVar2: &amp;quot; &amp;amp; $iSomeVar2)&lt;br /&gt;
&lt;br /&gt;
    ; Display the value of $g_iSomeVar2&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $g_iSomeVar2: &amp;quot; &amp;amp; $g_iSomeVar2)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A variable declared globally (with the Global keyword) is visible anywhere in the script.&amp;lt;br /&amp;gt;Always declare your global variables in the global scope, not in a function. It will prevent another function from using it before its declaration and the declaration is implicit (see [[#jumpsec1|examples]]).&lt;br /&gt;
&lt;br /&gt;
* A variable declared locally (with the Local keyword), has a visibility which depends on the scope where it&#039;s declared.&lt;br /&gt;
:Declaration in the global scope: the variable is visible everywhere; declare it as Local if this one is only to be used in the same scope, i.e. outside of any functions. A variable declared as Local in the Global scope is still a Global variable, it&#039;s only for the sake of code clarity that you&#039;d use the Local declaration in the Global scope.&lt;br /&gt;
:Declaration in a function: the variable is visible by the function itself and nowhere else.&lt;br /&gt;
&lt;br /&gt;
Structure of a code scope:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Global scope&lt;br /&gt;
&lt;br /&gt;
; Include the Constants file, it contains various constants; it&#039;s needed here for the $MB_SYSTEMMODAL flag of the MsgBox function)&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; This scope is either Global or Local, depending on where you use the variables&lt;br /&gt;
&lt;br /&gt;
; Assign a Global variable the number 0 (which corresponds to an initialization of a variable number), its scope is Global because it&#039;s used in at least one function&lt;br /&gt;
Global $g_iVar1 = 0&lt;br /&gt;
&lt;br /&gt;
; Assign a Local variable the string &amp;quot;foo&amp;quot;, its scope is Local because its use is used only in this scope&lt;br /&gt;
Local $sVar2 = &amp;quot;foo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Display the content of $sVar2&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $sVar2: &amp;quot; &amp;amp; $sVar2)&lt;br /&gt;
&lt;br /&gt;
; Re-assign a Local variable the string returned by the function MyFunc&lt;br /&gt;
$sVar2 = MyFunc()&lt;br /&gt;
&lt;br /&gt;
; Re-Display the content of $sVar2&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $sVar2: &amp;quot; &amp;amp; $sVar2)&lt;br /&gt;
&lt;br /&gt;
; Declare a function (its main utility is described later in Functions, we can see one here which is to create a Local scope)&lt;br /&gt;
Func MyFunc()&lt;br /&gt;
    ; Local scope&lt;br /&gt;
&lt;br /&gt;
    ; Display the content of $g_iVar1&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $g_iVar1: &amp;quot; &amp;amp; $g_iVar1)&lt;br /&gt;
&lt;br /&gt;
    ; Assign a Local variable the string &amp;quot;bar&amp;quot;, its scope is Local because its use is restricted to the function&#039;s scope&lt;br /&gt;
    Local $sVar3 = &amp;quot;bar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ; Display the content of $sVar3&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;Value of $sVar3: &amp;quot; &amp;amp; $sVar3)&lt;br /&gt;
&lt;br /&gt;
    ; Return the $sVar3 content, it will be visible (if used) to the scope where the function is called&lt;br /&gt;
    Return $sVar3&lt;br /&gt;
EndFunc   ;==&amp;gt;MyFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concerning the Dim keyword, its recommended usage is limited to empty an existing array (Example 1) or to redeclare a function parameter (Example 2).&lt;br /&gt;
&lt;br /&gt;
Example 1:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Include the Array UDF, it&#039;s needed here for the _ArrayDisplay function&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
; Assign a Local variable an array containing numbers with a size of 5&lt;br /&gt;
; Note that an array is 0 based, so to access the first element the code is: $aiArray[0]&lt;br /&gt;
Local $aiArray[5] = [1, 2, 3, 4, 5]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aiArray)&lt;br /&gt;
 &lt;br /&gt;
; Empty the array (and keep its size)&lt;br /&gt;
Dim $aiArray[5]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aiArray)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Remark: The variable type of an emptied array is a string, every non initialized variable is a string.&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Call MyFunc with default parameters ($vParam1 = 0)&lt;br /&gt;
MyFunc()&lt;br /&gt;
&lt;br /&gt;
; Assign a Local variable an array containing integers&lt;br /&gt;
Local $aiArray[3] = [3, 4, 5]&lt;br /&gt;
; Call MyFunc with $aiArray as parameter ($vParam1 = $aiArray)&lt;br /&gt;
MyFunc($aiArray)&lt;br /&gt;
&lt;br /&gt;
Func MyFunc($vParam1 = 0)&lt;br /&gt;
    ; If $vParam1 is NOT an array then redeclare it to an array&lt;br /&gt;
    If Not IsArray($vParam1) Then&lt;br /&gt;
        Dim $vParam1[3] = [0, 1, 2]&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    ; Display the array&lt;br /&gt;
    _ArrayDisplay($vParam1)&lt;br /&gt;
EndFunc   ;==&amp;gt;MyFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for the ReDim keyword, limit its use to resize an array when you want to keep its content:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Include the Array UDF, it&#039;s needed here for the _ArrayDisplay function&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
; Assign a Local variable an array containing numbers with a size of 5&lt;br /&gt;
; Note than an array is 0 based, so to access the first element the code is: $aiArray[0]&lt;br /&gt;
Local $aArray[5] = [1, 2, 3, 4, 5]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aArray)&lt;br /&gt;
 &lt;br /&gt;
; Resize the array (and keep its content)&lt;br /&gt;
ReDim $aArray[3]&lt;br /&gt;
 &lt;br /&gt;
; Display the contents&lt;br /&gt;
_ArrayDisplay($aArray)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Why using Dim over Local/Global is not always a good option:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Dim $g_vVariableThatIsGlobal = &amp;quot;This is a variable that has &amp;quot;&amp;quot;Program Scope&amp;quot;&amp;quot; aka Global.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, &amp;quot;An example of why Dim can cause more problems than solve them.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
Example()&lt;br /&gt;
 &lt;br /&gt;
Func Example()&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;&amp;quot;, $g_vVariableThatIsGlobal) ; That looks alright to me as it displays the following text: This is a variable that has &amp;quot;Program Scope&amp;quot; aka Global&lt;br /&gt;
 &lt;br /&gt;
    Local $vReturn = SomeFunc() ; Call some random function&lt;br /&gt;
 &lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, $vReturn, $g_vVariableThatIsGlobal) ; The Global variable ($g_vVariableThatIsGlobal) changed because I totally forgot I had a duplicate variable name in &amp;quot;SomeFunc&amp;quot;&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
 &lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    ; This should create a variable in Local scope if the variable name doesn&amp;quot;t already exist&lt;br /&gt;
    ; For argument sake I totally forgot that I declared a variable already with the same name&lt;br /&gt;
    ; Well I only want this to be changed in the function and not the variable at the top of the script&lt;br /&gt;
    ; Should be OK right? Think again&lt;br /&gt;
    Dim $g_vVariableThatIsGlobal = &amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    For $i = 1 To 10&lt;br /&gt;
        $g_vVariableThatIsGlobal &amp;amp;= $i ; This will return 12345678910 totally wiping the previous contents of $g_vVariableThatIsGlobal&lt;br /&gt;
    Next&lt;br /&gt;
    Return $g_vVariableThatIsGlobal&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jumpsec1&amp;quot;&amp;gt;Declaring Global variables in a Function is never a good idea:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Calling Example() first will initialise the Global variable $g_vVariableThatIsGlobal and therefore calling SomeFunc() won&#039;t return an error&lt;br /&gt;
; Now look at Example 2&lt;br /&gt;
Example()&lt;br /&gt;
 &lt;br /&gt;
Func Example()&lt;br /&gt;
    ; Declaring a variable in a function can cause serious problems, hence why all Global variables should be declared at the top of a script&lt;br /&gt;
    Global $g_vVariableThatIsGlobal = &#039;This is a variable that has &#039;&#039;File Scope&#039;&#039; aka Global.&#039;&lt;br /&gt;
    SomeFunc()&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
 &lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $g_vVariableThatIsGlobal) ; As the variable was initialised this will not return an error&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Calling SomeFunc() first will bypass the Global variable $g_vVariableThatIsGlobal being initialised and therefore AutoIt has no idea of what data the variable&lt;br /&gt;
; $g_vVariableThatIsGlobal contains&lt;br /&gt;
SomeFunc()&lt;br /&gt;
 &lt;br /&gt;
Func Example()&lt;br /&gt;
    ; Declaring a variable in a function can cause serious problems, hence why all Global variables should be declared at the top of a script&lt;br /&gt;
    Global $g_vVariableThatIsGlobal = &#039;This is a variable that has &#039;&#039;File Scope&#039;&#039; aka Global.&#039;&lt;br /&gt;
    SomeFunc()&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
 &lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $g_vVariableThatIsGlobal) ; As the variable wasn&#039;t initialised this will return an error of &amp;quot;variable used without being declared.&amp;quot;&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declaring variables in loops (For, While, Do etc..) can have an affect on efficiency:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Declaring variables inside loops should be avoided as the variable is re-declared on each repetition&lt;br /&gt;
For $i = 1 To 10 ; $i is in &#039;loop scope.&#039;&lt;br /&gt;
    Local $iInt = $i&lt;br /&gt;
Next&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $iInt) ; This will display 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Declaring variables outside of loops is more efficient in the long run&lt;br /&gt;
Local $iInt = 0&lt;br /&gt;
For $i = 1 To 10 ; $i is in &#039;loop scope.&#039;&lt;br /&gt;
    $iInt = $i&lt;br /&gt;
Next&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &#039;&#039;, $iInt) ; This will display 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is no requirement to declare the iteration count variable in a loop:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Correct&lt;br /&gt;
Local Const $iCount = 99&lt;br /&gt;
Local $aArray[$iCount]&lt;br /&gt;
For $i = 0 To UBound($iCount) - 1 ; $i is only used in the loop, so there is no requirement to declare it&lt;br /&gt;
    $aArray[$i] = $i&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
; Incorrect&lt;br /&gt;
Local Const $iCount = 99&lt;br /&gt;
Local $aArray[$iCount]&lt;br /&gt;
Local $i ; This is only used to store the iteration count value in the loop and therefore doesn&#039;t need to be declared. &lt;br /&gt;
For $i = 0 To UBound($iCount) - 1&lt;br /&gt;
    $aArray[$i] = $i&lt;br /&gt;
Next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As you can see, there is the Const keyword in the example, we are going to talk about it.&lt;br /&gt;
&lt;br /&gt;
== Const, Static, Enum ==&lt;br /&gt;
&lt;br /&gt;
=== Const ===&lt;br /&gt;
We won&#039;t talk about the advantages of using a constant variable, they are neglibible (for your information, an AutoIt constant variable is marked as read-only and remains a read-only variable when compiled).&lt;br /&gt;
&lt;br /&gt;
The Const keyword may be used first by some of you to avoid re-assignments.&lt;br /&gt;
The best way to use them is for real static values, meaning that these values won&#039;t change regardless of the instance of the program.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Not recommended&lt;br /&gt;
Local Const $hGUI = GUICreate(&amp;quot;MyGUI&amp;quot;)&lt;br /&gt;
; The handle of the window is unique, it&#039;s generated by Windows and changes&lt;br /&gt;
&lt;br /&gt;
; Recommended&lt;br /&gt;
Local Const $iMyAge = 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Static ===&lt;br /&gt;
Static variables are the solution to global variables being used in only one function.&lt;br /&gt;
e.g: Retain variable data once returned from a Function and only use that variable in that particular Function.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    SomeFunc() ; This will display a message box of 1, 1&lt;br /&gt;
    SomeFunc() ; This will display a message box of 1, 2&lt;br /&gt;
    SomeFunc() ; This will display a message box of 1, 3&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
Func SomeFunc()&lt;br /&gt;
    ; This initialises a Static variable in Local scope. When a variable is declared just in Local scope (within a Function,)&lt;br /&gt;
    ; it&#039;s destroyed when the Function ends/returns. This isn&#039;t the case for a Static variable. Also, the variable can&#039;t be&lt;br /&gt;
    ; accessed from anywhere else in the script apart from the Function it was declared in&lt;br /&gt;
    Local Static $vVariableThatIsStatic = 0&lt;br /&gt;
    Local $vVariableThatIsLocal = 0&lt;br /&gt;
    $vVariableThatIsLocal += 1 ; This will always be 1 as it is destroyed once returned from SomeFunc&lt;br /&gt;
    $vVariableThatIsStatic += 1 ; This will increase by 1&lt;br /&gt;
    MsgBox(4096, $vVariableThatIsLocal, $vVariableThatIsStatic)&lt;br /&gt;
EndFunc   ;==&amp;gt;SomeFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enum ===&lt;br /&gt;
This statement is often practical in certain situations:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    ; Create variables in Local scope and enumerate through the variables. Default is to start from 0&lt;br /&gt;
    Local Enum $eCat, $eDog, $eMouse, $eHamster ; $eHamster is equal to the value 3, not 4&lt;br /&gt;
&lt;br /&gt;
    ; Create an array in Local scope with 4 elements&lt;br /&gt;
    Local $aAnimalNames[4]&lt;br /&gt;
&lt;br /&gt;
    ; Assign each array element with the name of the respective animal. For example the name of the cat is Jasper&lt;br /&gt;
    $aAnimalNames[$eCat] = &#039;Jasper&#039; ; $eCat is equal to 0, similar to using $aAnimalNames[0]&lt;br /&gt;
    $aAnimalNames[$eDog] = &#039;Beethoven&#039; ; $eDog is equal to 1, similar to using $aAnimalNames[1]&lt;br /&gt;
    $aAnimalNames[$eMouse] = &#039;Pinky&#039; ; $eMouse is equal to 2, similar to using $aAnimalNames[2]&lt;br /&gt;
    $aAnimalNames[$eHamster] = &#039;Fidget&#039; ; $eHamster is equal to 3, similar to using $aAnimalNames[3]&lt;br /&gt;
&lt;br /&gt;
    ; Display the values of the array&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &#039;&#039;, &#039;$aAnimalNames[$eCat] = &#039; &amp;amp; $aAnimalNames[$eCat] &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
            &#039;$aAnimalNames[$eDog] = &#039; &amp;amp; $aAnimalNames[$eDog] &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
            &#039;$aAnimalNames[$eMouse] = &#039; &amp;amp; $aAnimalNames[$eMouse] &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
            &#039;$aAnimalNames[$eHamster] = &#039; &amp;amp; $aAnimalNames[$eHamster] &amp;amp; @CRLF)&lt;br /&gt;
&lt;br /&gt;
    ; Sometimes using this approach for accessing an element is more practical than using a numerical value, due to the fact changing the index value of&lt;br /&gt;
    ; the enum constant has no affect on it&#039;s position in the array. Therefore changing the location of $eCat in the array is as simple as changing the order&lt;br /&gt;
    ; it appears in the initial declaration e.g&lt;br /&gt;
&lt;br /&gt;
    ; Local Enum $eDog, $eMouse, $eCat, $eHamster&lt;br /&gt;
&lt;br /&gt;
    ; Now $eCat is the 2nd element in the array. If you were using numerical values, you would have to manually change all references of $aAnimalNames[0] to&lt;br /&gt;
    ; $aAnimalNames[2], as well as for the other elements which have now shifted&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Au3Check directive ==&lt;br /&gt;
As you may know (and we hope), the Au3Check tool checks your code for syntax errors, variables used without being declared etc. which is a good thing to fix your script.&lt;br /&gt;
&lt;br /&gt;
With the official custom directive used to check the helpfile examples/includes, you can apply the good coding practices listed above:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|Note: this directive is only used if you&#039;ve installed the full version of [https://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/download/SciTE4AutoIt3.exe Scite4AutoIt3]&lt;br /&gt;
&lt;br /&gt;
== Magic Numbers ==&lt;br /&gt;
Magic numbers are arbitrary numbers interspersed throughout a program&#039;s source code which do not have an associated identifier. The downside to this is not being able to derive a meaning from the number. &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
MsgBox(262144, &amp;quot;Magic Numbers&amp;quot;, &amp;quot;It&#039;s Adventure Time!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In this example, the magic number is 262144 with the identifier being $MB_TOPMOST according to the helpfile.&lt;br /&gt;
&lt;br /&gt;
The corrected example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
MsgBox($MB_TOPMOST, &amp;quot;Magic Numbers&amp;quot;, &amp;quot;It&#039;s Adventure Time!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; Imagine you&#039;re a new user to AutoIt and you come across this code, where would you find -3, -4 or -5 in the help file?&lt;br /&gt;
; Since AutoIt is relatively a new concept to you, your first thought isn&#039;t to search through all the include files, I mean&lt;br /&gt;
; why would you, the help file is there for a reason&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    Local $hGUI = GUICreate(&#039;&#039;)&lt;br /&gt;
    GUICtrlCreateLabel(&#039;Why magic numbers are counter productive.&#039;, 5, 5)&lt;br /&gt;
    GUICtrlSetState(Default, 128) ; Does this hide, show or disable it?&lt;br /&gt;
    GUICtrlSetState(Default, 64) ; Does this hide, show or disable it?&lt;br /&gt;
    GUISetState(@SW_SHOW, $hGUI)&lt;br /&gt;
&lt;br /&gt;
    While 1&lt;br /&gt;
        Switch GUIGetMsg()&lt;br /&gt;
            Case -3 ; Doesn&#039;t really tell much about what it does&lt;br /&gt;
                ExitLoop&lt;br /&gt;
&lt;br /&gt;
            Case -4, -5 ; Again, no idea what these are. MouseMove? MouseClick? Restore?&lt;br /&gt;
                MsgBox(4096, &#039;&#039;, &#039;Do something when this action takes place.&#039;)&lt;br /&gt;
&lt;br /&gt;
        EndSwitch&lt;br /&gt;
    WEnd&lt;br /&gt;
&lt;br /&gt;
    GUIDelete($hGUI)&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Did you understand the numbers were these:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;GUIConstantsEx.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
    Local $hGUI = GUICreate(&#039;&#039;)&lt;br /&gt;
    GUICtrlCreateLabel(&#039;Why magic numbers are counter productive.&#039;, 5, 5)&lt;br /&gt;
    GUICtrlSetState(Default, $GUI_DISABLE) ; Better, this is documented in the help file&lt;br /&gt;
    GUICtrlSetState(Default, $GUI_ENABLE) ; Better, this is documented in the help file&lt;br /&gt;
    GUISetState(@SW_SHOW, $hGUI)&lt;br /&gt;
&lt;br /&gt;
    While 1&lt;br /&gt;
        Switch GUIGetMsg()&lt;br /&gt;
            Case $GUI_EVENT_CLOSE ; Better, this is documented in the help file. Ah, it&#039;s the close action&lt;br /&gt;
                ExitLoop&lt;br /&gt;
&lt;br /&gt;
            Case $GUI_EVENT_MINIMIZE, $GUI_EVENT_RESTORE ; Better, this is documented in the help file&lt;br /&gt;
                MsgBox($MB_SYSTEMMODAL, &#039;&#039;, &#039;Do something when this action takes place.&#039;) &lt;br /&gt;
&lt;br /&gt;
        EndSwitch&lt;br /&gt;
    WEnd&lt;br /&gt;
&lt;br /&gt;
    GUIDelete($hGUI)&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Magic_number_(programming) Magic number (programming)]&lt;br /&gt;
&lt;br /&gt;
== Include-once directive ==&lt;br /&gt;
This one is designed for standard includes and UDFs, it&#039;s highly recommended to use it only for that.&lt;br /&gt;
&lt;br /&gt;
Those includes may be used in more than one file of your project because they are needed for some includes or your script itself.&lt;br /&gt;
In that case, the code would be duplicated, which is not a good thing especially if you have constants declared in those files, in so far as the constants cannot be redeclared/reassigned you will get error messages about trying to redeclare them; same thing for functions, you can&#039;t use a function name more than once.&lt;br /&gt;
&lt;br /&gt;
Put the directive at the top of your UDF (library) to avoid it from being included more than once :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include-once&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For discussion please visit: [http://www.autoitscript.com/forum/index.php?showtopic=146866 Forum: Good coding practices in AutoIt]&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=UDF-spec&amp;diff=14099</id>
		<title>UDF-spec</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=UDF-spec&amp;diff=14099"/>
		<updated>2019-10-16T21:04:04Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Structures */ Capitalized “Hungarian”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UDF]]&lt;br /&gt;
{{WIP}}This page is still under construction.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A library is a collection of one or more User Defined Functions (UDFs). However, the term UDF is often used to describe the collection as a whole. If a UDF is to be considered for inclusion in the standard set distributed with AutoIt then it must meet all the criteria detailed here, but it&#039;s also good practice to always write in conformance with at least the majority of this document, as that is what will be expected by people reading your code later.&lt;br /&gt;
&lt;br /&gt;
== Basic Requirements ==&lt;br /&gt;
Firstly, the code itself should meet the following basic requirements:&lt;br /&gt;
&lt;br /&gt;
* Be tidied. Just hit &amp;lt;code&amp;gt;Ctrl+T&amp;lt;/code&amp;gt; from SciTE or run Tidy manually. The only flag needed is &amp;lt;code&amp;gt;/sf&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pass Au3Check with no errors using the strictest settings: &amp;lt;code&amp;gt;-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support everything AutoIt supports. In some cases features may not be able to support everything, in which case this should be checked for and return errors appropriately. This applies to: windows OS versions (AutoIt has support for all OS&#039; from windows 2000), unicode and ansi strings, 64 and 32 bit machines.&lt;br /&gt;
* Not use any magic numbers. Ever. None. At all. No excuses.&lt;br /&gt;
&lt;br /&gt;
== UDF Outline ==&lt;br /&gt;
The library itself has a header that details important information such as the minimum OS and AutoIt versions, and what system dlls are required. There is also a number of other sections that are required that list what is present in the UDF.&lt;br /&gt;
&lt;br /&gt;
=== Includes ===&lt;br /&gt;
Since a UDF is designed to define functions, it should only be included once. As a result, the &amp;lt;code&amp;gt;#include-once&amp;lt;/code&amp;gt; directive should be used. This is typically the first line of the UDF, followed by the includes used by the UDF. Include statements should use the double quoted form, as the library is expected to work in the same directory as libraries it depends on. Non standard libraries can be used if necessary, but this should be documented and linked to so users can download it as well. It goes without saying that a UDF based on non-standard UDFs cannot itself become a standard.&lt;br /&gt;
&lt;br /&gt;
=== Index ===&lt;br /&gt;
The index follows the following template (taken from &amp;lt;code&amp;gt;WinAPI.au3&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #INDEX# =======================================================================================================================&lt;br /&gt;
; Title .........: Windows API&lt;br /&gt;
; AutoIt Version : 3.2&lt;br /&gt;
; Description ...: Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Author(s) .....: Paul Campbell (PaulIA), gafrost, Siao, Zedna, arcker, Prog@ndy, PsaltyDS, Raik, jpm&lt;br /&gt;
; Dll ...........: kernel32.dll, user32.dll, gdi32.dll, comdlg32.dll, shell32.dll, ole32.dll, winspool.drv&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The only required element in the index header is &amp;lt;code&amp;gt;Title&amp;lt;/code&amp;gt;. All others are ignored by the processor, but should be included for reference, remember that you can add some custom fields like &amp;lt;code&amp;gt;Links&amp;lt;/code&amp;gt; too.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Dll&amp;lt;/code&amp;gt; field can remain empty in many cases where no dlls are called directly. This header must be defined.&lt;br /&gt;
&lt;br /&gt;
=== Other Sections ===&lt;br /&gt;
Other sections, in order of appearance, are as follows.&lt;br /&gt;
&lt;br /&gt;
==== Variables ====&lt;br /&gt;
All global variables needed to be declared in the UDF are defined in this section. They should follow the variable rules for globals. Individual variables do not need to be documented, as it is assumed they are for internal use only. Any globals designed to be accessible for the user should instead be wrapped by a function (or multiple functions if globals must be retrieved and set). The template for this section is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #VARIABLES# ===================================================================================================================&lt;br /&gt;
Global $__g_vMyGlobal = 0&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If no globals are needed then this section may be ommitted. Please consider the use of global variables carefully, and read through the section on global variables.&lt;br /&gt;
&lt;br /&gt;
==== Constants ====&lt;br /&gt;
Any global constant values are defined in this section. This should be constants only designated for use within the library itself. Constants that may be needed by the user should be defined in a separate file, named &amp;lt;code&amp;gt;UDFConstants.au3&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;UDF&amp;lt;/code&amp;gt; is the name of the parent file. For example &amp;lt;code&amp;gt;File.au3&amp;lt;/code&amp;gt; uses constants defined in &amp;lt;code&amp;gt;FileConstants.au3&amp;lt;/code&amp;gt;. The exception to that rule is control UDFs which miss out the prepended &#039;GUI&#039; when naming constant files, so &amp;lt;code&amp;gt;GUIButton.au3&amp;lt;/code&amp;gt; uses constants from &amp;lt;code&amp;gt;ButtonConstants.au3&amp;lt;/code&amp;gt;. The template for this section is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #CONSTANTS# ===================================================================================================================&lt;br /&gt;
Global Const $__MYUDFCONSTANT_FOOBAR = 42&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If no constants are needed in this section, either because none are used or because they are stored in a separate file, then it may be ommitted. Please read the section on global constants for specific info on naming and definition of constants.&lt;br /&gt;
&lt;br /&gt;
==== Listing ====&lt;br /&gt;
This defines all functions and structures currently used in the library. It MUST be the second defined header item after [[#Index]]. It is a simple list with each function on a line where the functions and structures appear in the same order as they do in the code, which is alphabetical order and structures first. A simple way to generate this list is to create a small script that searches for function definitions and outputs them in the correct format, an example of which is [http://www.autoitscript.com/forum/topic/120820-function-name-lister/ here]. In addition there is a second section that lists functions and structures for internal use only, this does not need to appear if none are defined.&lt;br /&gt;
&lt;br /&gt;
The template for these sections are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #CURRENT# =====================================================================================================================&lt;br /&gt;
;$tagSTRUCT&lt;br /&gt;
;_MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
; #INTERNAL_USE_ONLY# ===========================================================================================================&lt;br /&gt;
;$tagINTERNALSTRUCT&lt;br /&gt;
;__MyUDF_InternalFunction&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section still needs to be defined for files that only define constants. It should also be noted that there MUST NOT be a space between the &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; and the function/structure name.&lt;br /&gt;
&lt;br /&gt;
==== Undocumented Listing ====&lt;br /&gt;
There is a final kind of listing that lists functions for which no documentation exists, or they have been deprecated and are only included for backwards compatibility. These are listed in a section with the header &amp;lt;code&amp;gt;NO_DOC_FUNCTION&amp;lt;/code&amp;gt;. This is very rarely used, and is reserved only for functions that can be utilised by the user, or that would have been in the past, as opposed to those for internal use only.&lt;br /&gt;
&lt;br /&gt;
Template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #NO_DOC_FUNCTION# =============================================================================================================&lt;br /&gt;
;_MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Renamed Functions ====&lt;br /&gt;
Although it should not be the case in new UDFs, many of the older ones (particularly to do with controls) have had script breaking name changes to functions. These are documented in the UDF to ensure updating old scripts is as easy as possible. The basic format for this is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #NO_DOC_FUNCTION# =============================================================================================================&lt;br /&gt;
;_MyUDF_OldFunction                        ; --&amp;gt; _MyUDF_NewFunction&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The space padding is optional. This section is ignored as far as the docs are concerned, and is usually omitted.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Naming ===&lt;br /&gt;
Function names must start with an underscore, and the first word is the library name. There is then usually another underscore before the rest of the function name. The library name should be consistent across all the functions in the library, and can be shortened if a logical abbreviation is available (e.g. &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; ==&amp;gt; &amp;lt;code&amp;gt;Win&amp;lt;/code&amp;gt;). Each word should be capitalized, but no underscores are placed in the rest of the name, for example &amp;lt;code&amp;gt;_WinAPI_GetWindowLong&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For control libraries, the first part of the function name is changed slightly. For example the UDF for listviews would use &amp;lt;code&amp;gt;_GUICtrlListview_*&amp;lt;/code&amp;gt;. When a function wraps a dll call, then the second part should closely resemble the function name as it appears in other languages. This also applies to functions acting as a wrapper to &amp;lt;code&amp;gt;SendMessage&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Functions are defined in alphabetical order by name, which is the same as using &amp;lt;code&amp;gt;Tidy&amp;lt;/code&amp;gt; with the &amp;lt;code&amp;gt;/sf&amp;lt;/code&amp;gt; flag set.&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
Parameters should follow the variable naming scheme ([[#Naming_2|here]]). All parameters must be checked to ensure they are valid, and return unique and documented error codes if they are not. For functions involving a specific type of control, this includes checking the class name using &amp;lt;code&amp;gt;_WinAPI_IsClassName&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Parameters that are optional or byref should be documented as such, and the effect these have explicitly stated. For example a byref parameter should detail exactly what the expected output is as well as the input.&lt;br /&gt;
&lt;br /&gt;
=== Headers ===&lt;br /&gt;
All functions have a documentation header that describes the function. This uses the following template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name...........: _WinAPI_GetMousePos&lt;br /&gt;
; Description ...: Returns the current mouse position&lt;br /&gt;
; Syntax.........: _WinAPI_GetMousePos([$bToClient = False[, $hWnd = 0]])&lt;br /&gt;
; Parameters ....: $bToClient   - If True, the coordinates will be converted to client coordinates&lt;br /&gt;
;                  $hWnd        - Window handle used to convert coordinates if $fToClient is True&lt;br /&gt;
; Return values .: Success      - $tagPOINT structure with current mouse position&lt;br /&gt;
;                  Failure      - 0&lt;br /&gt;
; Author ........: Paul Campbell (PaulIA)&lt;br /&gt;
; Modified.......:&lt;br /&gt;
; Remarks .......: This function takes into account the current MouseCoordMode setting when  obtaining  the  mouse  position.  It&lt;br /&gt;
;                  will also convert screen to client coordinates based on the parameters passed.&lt;br /&gt;
; Related .......: $tagPOINT, _WinAPI_GetMousePosX, _WinAPI_GetMousePosY&lt;br /&gt;
; Link ..........: &lt;br /&gt;
; Example .......: Yes&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _WinAPI_GetMousePos($bToClient = False, $hWnd = 0)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header is 129 characters wide, and any text within it should be wrapped to that length. For example the &amp;lt;code&amp;gt;Remarks&amp;lt;/code&amp;gt; in the above header has been extended to cover two lines. The exception to that rule is the &amp;lt;code&amp;gt;Syntax&amp;lt;/code&amp;gt; line, which should not be wrapped. Some of the parameters in the header are optional, in which case they should remain, but be left empty (for example the &amp;lt;code&amp;gt;Link&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Modified&amp;lt;/code&amp;gt; lines in the above header). In others, they are needed, but can be empty or not used such as &amp;lt;code&amp;gt;Parameters&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Return Values&amp;lt;/code&amp;gt;. In this case the value should be &#039;None&#039;, as they will still be present in the documentation.&lt;br /&gt;
&lt;br /&gt;
There are some flags that can be used within function headers: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;+&#039;&#039;&#039; in column 20 is the continuation flag for the previous line (used in Parameters, Return Values)&lt;br /&gt;
* &#039;&#039;&#039;|&#039;&#039;&#039; in column 20 is a new line in the right side of the table when the help file is generated (used in Parameters, Return Values)&lt;br /&gt;
* &#039;&#039;&#039;-&#039;&#039;&#039; in column 20 will create new row in the table, used for things like Defaults for a style (used in Parameters, Return Values)&lt;br /&gt;
* &#039;&#039;&#039;+&#039;&#039;&#039; in column 2 of Remarks is a blank line&lt;br /&gt;
Name&lt;br /&gt;
:Specifies the name of the function. This will be identical to how it appeas in the Func statement in the code itself.&lt;br /&gt;
Description&lt;br /&gt;
:Gives a short summary of what the function does. This should only be a single line, as it is only designed to give a short impression of what is happening. For the standard set of includes distributed with AutoIt3, this value is also used in the SciTE calltips.&lt;br /&gt;
Syntax&lt;br /&gt;
:Describes the syntax of the function call. This differs slightly from what appears in the code itself for optional parameters, which are enclosed in square brackets (&amp;quot;[ ]&amp;quot;). Since subsequent parameters must also be optional, and cannot be defined unless all the previous ones have been given, these brackets are nested in the form: Function([param1[, param2[,param3]]]). Note that the opening bracket appears before the comma seperator.&lt;br /&gt;
Parameters&lt;br /&gt;
:This is a list of the arguments accepted by the function. Each is listed, followed by a dash (&amp;quot;-&amp;quot;) and a description of what it is. The dash can be padded for neatness, although the amount of padding depends on how long the parameter names are. If the parameter is optional then the meaning of the default value should be given, similarly if it&#039;s used to pass data back to the program in the form of byref then the changes made should also be detailed. For more information on parameters see Parameters.&lt;br /&gt;
Return values&lt;br /&gt;
:Details what is returned by the function. This often comes in the form of Success and Failure values, but this is not always the case. Any setting of the @error of @extended flags should be detailed, along with their meanings, in some cases it is enough to say that @error is set to non-zero in the event of an error, in most cases though a list of values for @error should be given.&lt;br /&gt;
Author&lt;br /&gt;
:This is the original writer of the function. It should contain the username, so that any queries about the code can be made through the forum, but you can give as much or little information as you feel appropriate.&lt;br /&gt;
Modified&lt;br /&gt;
:This is a list of modifications made. At its most basic this is just a list of users who have made changes, but ideally it includes some information about what they did, in which cases it follows the same form as other multi-value lines, with the username and description of modifications seperated by a dash.&lt;br /&gt;
Remarks&lt;br /&gt;
:This is anything the user should know about a function in order to use it. For example exceptional cases and recommended ways to handle the function should all be detailed here, as well as additional info about possible reasons for failure and how to deal with them.&lt;br /&gt;
Related&lt;br /&gt;
:A comma seperated list of functions or structures related to the function.&lt;br /&gt;
Link&lt;br /&gt;
:A link to additional information about the function. For many system function wrappers, this will be &amp;lt;code&amp;gt;@@MsdnLink@@ FunctionName&amp;lt;/code&amp;gt;, which represents that the user should search MSDN for the function.&lt;br /&gt;
Example&lt;br /&gt;
:A simple yes or no value specifying whether the function has an example. If this is no then your UDF is not ready to be released. The [[#Examples]] section has more information on the format and location of examples.&lt;br /&gt;
&lt;br /&gt;
The easiest way to generate the header is to copy and paste the following blank template in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Syntax.........: &lt;br /&gt;
; Parameters ....: &lt;br /&gt;
; Return values .: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Modified.......: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; Link ..........: &lt;br /&gt;
; Example .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are also a number of plugins for SciTE that will generate a header and maybe fill in certain known values for you such as Name, Syntax and Parameters. The most complete one that conforms to these standards is [http://code.google.com/p/m-a-t/wiki/UDFHeaderGenerator here], but there are two others [http://www.autoitscript.com/forum/topic/28270-lua-script-for-udf-header/ here] and [http://www.autoitscript.com/forum/topic/28270-lua-script-for-udf-header/page__view__findpost__p__200823 here].&lt;br /&gt;
&lt;br /&gt;
=== Internal use only ===&lt;br /&gt;
Functions can also be marked for use only within the library and not to be documented for use by the user. These are named according to the same rules as normal functions but begin with a double underscore (&amp;quot;__&amp;quot;). The header is exactly the same except with the first line replaced, to make the blank template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #INTERNAL_USE_ONLY# ===========================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Syntax.........: &lt;br /&gt;
; Parameters ....: &lt;br /&gt;
; Return values .: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Modified.......: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; Link ..........: &lt;br /&gt;
; Example .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
Structures are defined as global constants, and follow the naming pattern &amp;lt;code&amp;gt;$tagSTRUCTNAME&amp;lt;/code&amp;gt;. The struct name should be as it appears on MSDN if it&#039;s used in the windows API, or follow a similar pattern if not. It should go without saying that they must work for both 32 and 64 bit machines, including resolving any alignment issues. Elements should also be named as they appear on MSDN if they are taken from there, which includes the hungarian notation prefix. Although many standard UDFs do not follow that rule, importantly &amp;lt;code&amp;gt;StructureConstants.au3&amp;lt;/code&amp;gt;, the rule still stands.&lt;br /&gt;
&lt;br /&gt;
=== Headers ===&lt;br /&gt;
Structures need a header similar to functions, but with some minor differences. The same rules apply in terms of wrapping and line length however. The header follow this standard template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #STRUCTURE# ===================================================================================================================&lt;br /&gt;
; Name...........: $tagPOINT&lt;br /&gt;
; Description ...: Defines the x and y coordinates of a point&lt;br /&gt;
; Fields ........: X - Specifies the x-coordinate of the point&lt;br /&gt;
;                  Y - Specifies the y-coordinate of the point&lt;br /&gt;
; Author ........: Paul Campbell (PaulIA)&lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Global Const $tagPOINT = &amp;quot;long X;long Y&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is essentially a shortened header, with the only thing new is the Fields line, which effectively replaces the Parameters field in terms of usage. All the same rules apply as listed [[#Function Header Fields|here]].&lt;br /&gt;
&lt;br /&gt;
The blank template is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #STRUCTURE# ===================================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Fields ........: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Structures may also be marked for internal use only. In this case the header ramains the same, but the sections first line changes. The blank template is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #INTERNAL_USE_ONLY# ===========================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Fields ........: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
For code readability, there are special rules dealing with variables, particularly naming. All variables should be declared at the beginning of their scope, which usually means at the start of the function in which they are used, but could mean the top of the UDF itself in the [[#Variables|Variables section]].&lt;br /&gt;
&lt;br /&gt;
=== Naming ===&lt;br /&gt;
A variable&#039;s first letter signifies the expected scope and type of the variable. See [[Best_coding_practices#Names_of_Variables|Names of Variables]]&lt;br /&gt;
&lt;br /&gt;
=== Globals ===&lt;br /&gt;
The use of globals in a UDF is generally frowned upon, and byref parameters and static variables should be used where possible instead. However, in cases where this is not possible and a global must be used they should be defined using the following naming pattern: &amp;lt;code&amp;gt;$__g_&amp;amp;lt;VARNAME&amp;amp;gt;&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;&amp;amp;lt;VARNAME&amp;amp;gt;&amp;lt;/code&amp;gt; is the name as it would usually appear according to the variable naming rules above. This ensures there will never be a conflict with user variables of other UDF globals. They should be declared at the top of the UDF in the Variables section.&lt;br /&gt;
&lt;br /&gt;
Globals are always private. If they need to be accessed by the user then functions need to be written wrapping that operation and values should be checked. Notable exceptions are debug variables, which are designed for developer purposes and may be used by some users in extreme cases. These are named &amp;lt;code&amp;gt;$Debug_&amp;amp;lt;UDF&amp;amp;gt;&amp;lt;/code&amp;gt; although the &amp;lt;code&amp;gt;&amp;amp;lt;UDF&amp;amp;gt;&amp;lt;/code&amp;gt; part is often shortened so &amp;lt;code&amp;gt;GUIEdit.au3&amp;lt;/code&amp;gt; uses &amp;lt;code&amp;gt;$Debug_Ed&amp;lt;/code&amp;gt;. It is not required that a UDF has debugging symbols, but they are allowed to remain in releases.&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
There are two types of constants, internal and public. Public constants are designed to be utilised by the user, and are referenced in functions that use them. They include styles and flags. Internal constants are designed for use only within the library, so that values used fairly often can be held in one place to allow for easy updating. Both kinds of constant are always typed in all upper case. Constants taken from the windows API should appear exactly as they are defined there, but internal constants follow the naming pattern: &amp;lt;code&amp;gt;$__&amp;amp;lt;UDF&amp;amp;gt;CONSTANT_&amp;amp;lt;NAME&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The &amp;lt;code&amp;gt;Dim&amp;lt;/code&amp;gt; statement ===&lt;br /&gt;
Should not be used.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
All functions and structures that are made public to the user need to have a good quality example. This means that it should:&lt;br /&gt;
&lt;br /&gt;
* Be simple. Ideally the only functions used are basic functions like ConsoleWrite and MsgBox and the function that the example is written for. Writing a single example that covers a wide range of functions is not nearly as easy to use as writing an example per function that clearly demonstrates its use.&lt;br /&gt;
* Be readable. Everything should be explained step by step in comments.&lt;br /&gt;
* Be correct. In addition to passing the same Au3Check flags as the UDF itself (&amp;lt;code&amp;gt;-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7&amp;lt;/code&amp;gt;) it should always be written with best practice being the main consideration. This takes preference over the first point, just because code is shorter and looks easier doesn&#039;t mean it&#039;s right.&lt;br /&gt;
* Examples should represent all the functionality. If there is more than one way of using a function then include more than one example of how to use it.&lt;br /&gt;
* Not make any permanent changes to the users computer. For example, if demonstrating a File function, be sure to delete the file after it has been used. The same applies for any function that makes a change to the environment: the changes MUST be undone.&lt;br /&gt;
&lt;br /&gt;
Always remember, the readability of code in an example is MORE important than the readability of code inside the UDF itself.&lt;br /&gt;
&lt;br /&gt;
Examples are stored in script files called &amp;lt;code&amp;gt;&amp;amp;lt;FUNCTION&amp;amp;gt;.au3&amp;lt;/code&amp;gt;. The files should be kept in a folder called &amp;lt;code&amp;gt;Examples&amp;lt;/code&amp;gt;. To remain correct all examples should be wrapped in functions, such that the only code executed in the global scope is calling the function. This is usually named &amp;lt;code&amp;gt;Example&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;#include &amp;lt;Constants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;GUIConstantsEx.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opt(&amp;quot;MustDeclareVars&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $idButton_Run, $idButton_Test, $iMsg, $hGUI_MyApp&lt;br /&gt;
	&lt;br /&gt;
	$hGUI_MyApp = GUICreate(&amp;quot;My GUI Button&amp;quot;) ; Will create a dialog box that when displayed is centered&lt;br /&gt;
&lt;br /&gt;
	$idButton_Run = GUICtrlCreateButton(&amp;quot;Run Notepad&amp;quot;, 4, 4, 80, 30)&lt;br /&gt;
	$idButton_Test = GUICtrlCreateButton(&amp;quot;Button Test&amp;quot;, 4, 38, 80, 30)&lt;br /&gt;
&lt;br /&gt;
	GUISetState() ; will display a dialog box with 2 button&lt;br /&gt;
&lt;br /&gt;
	; Run the GUI until the dialog is closed&lt;br /&gt;
	While 1&lt;br /&gt;
		$iMsg = GUIGetMsg()&lt;br /&gt;
		Select&lt;br /&gt;
			Case $iMsg = $GUI_EVENT_CLOSE&lt;br /&gt;
				ExitLoop&lt;br /&gt;
			Case $iMsg = $idButton_Run&lt;br /&gt;
				Run(&amp;quot;Notepad.exe&amp;quot;) ; Will Run/Open Notepad&lt;br /&gt;
			Case $iMsg = $idButton_Test&lt;br /&gt;
				MsgBox($MB_SYSTEMMODAL, &amp;quot;Testing&amp;quot;, &amp;quot;Button 2 was pressed&amp;quot;) ; Will demonstrate Button 2 being pressed&lt;br /&gt;
		EndSelect&lt;br /&gt;
	WEnd&lt;br /&gt;
	GUIDelete($hGUI_MyApp)&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple Examples ===&lt;br /&gt;
The helpfile now supports multiple examples per function. In order to maintain backwards compatibility with any other tools that use examples, the first file is still named &amp;lt;code&amp;gt;&amp;amp;lt;FUNCTION&amp;amp;gt;.au3&amp;lt;/code&amp;gt;, but any additional examples are named &amp;lt;code&amp;gt;&amp;amp;lt;FUNCTION&amp;amp;gt;[n].au3&amp;lt;/code&amp;gt; where n is an integer counter starting at 2.&lt;br /&gt;
&lt;br /&gt;
== Template UDF ==&lt;br /&gt;
Here is an example of a UDF called &amp;lt;code&amp;gt;MyUDF.au3&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; AU3Check settings&lt;br /&gt;
#AutoIt3Wrapper_Run_AU3Check=Y&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7&lt;br /&gt;
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y&lt;br /&gt;
#include-once&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;MyUDFConstants.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;AnInclude.au3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Title .........: MyUDF&lt;br /&gt;
; AutoIt Version : 3.3.10.2&lt;br /&gt;
; Language ......: English&lt;br /&gt;
; Author(s) .....: &lt;br /&gt;
; Modifiers .....: &lt;br /&gt;
; Forum link ....: a link to the main forum topic (if aplicable)&lt;br /&gt;
; Description ...: An example UDF that does very little.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
; #CURRENT# =====================================================================================================================&lt;br /&gt;
;$tagMYSTRUCT&lt;br /&gt;
;_MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
; #STRUCTURE# ===================================================================================================================&lt;br /&gt;
; Name...........: $tagMYSTRUCT&lt;br /&gt;
; Description ...: An example of a structure.&lt;br /&gt;
; Fields ........: hFoo       - A handle to foo that does something.&lt;br /&gt;
;                  iBar       - An integer that does something.&lt;br /&gt;
; Author ........: Matt Diesel (Mat)&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Global Const $tagMYSTRUCT = &amp;quot;ptr hFoo; int iBar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name...........: _MyUDF_Function&lt;br /&gt;
; Description ...: A function that does something.&lt;br /&gt;
; Syntax.........: _MyUDF_Function(ByRef $avAnArray, $iAnInt[, $hAHandle = 0[, $nSomeNumber = 42]])&lt;br /&gt;
; Parameters ....: $avAnArray       - [byref] An array of anything. The value of anything is changed and passed out using this&lt;br /&gt;
;                                     parameter. The array should only have one dimension&lt;br /&gt;
;                  $iAnInt          - An integer that does very little.&lt;br /&gt;
;                  $hAHandle        - [optional] A handle. Default is zero.&lt;br /&gt;
;                  $nSomeNumber     - [optional] A number of some kind. Default is 42.&lt;br /&gt;
; Return values .: Success          - A MYSTRUCT structure.&lt;br /&gt;
;                  Failure          - Returns zero and sets the @error flag:&lt;br /&gt;
;                                   |1 - The $avAnArray is invalid.&lt;br /&gt;
; Author ........: Matt Diesel (Mat)&lt;br /&gt;
; Modified.......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: $tagMYSTRUCT&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _MyUDF_Function(ByRef $avAnArray, $iAnInt, $hAHandle = 0, $nSomeNumber = 42)&lt;br /&gt;
	; 1 - Error Checking for parameters.&lt;br /&gt;
	If Not IsArray($avAnArray) Or UBound($avAnArray, 0) &amp;lt;&amp;gt; 1 Then Return SetError(1, 0, 0) ; The $avAnArray is invalid.&lt;br /&gt;
&lt;br /&gt;
	; 2 - Declaration of locals.&lt;br /&gt;
	Local $tMS = DllStructCreate($tagMYSTRUCT)&lt;br /&gt;
&lt;br /&gt;
	; 3 - Function code&lt;br /&gt;
	DllStructSetData($tMS, &amp;quot;hFoo&amp;quot;, $hAHandle)&lt;br /&gt;
	DllStructSetData($tMS, &amp;quot;iBar&amp;quot;, $iAnInt * $nSomeNumber)&lt;br /&gt;
&lt;br /&gt;
	Return $tMS&lt;br /&gt;
EndFunc   ;==&amp;gt;_MyUDF_Function&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=UDF-spec&amp;diff=14098</id>
		<title>UDF-spec</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=UDF-spec&amp;diff=14098"/>
		<updated>2019-10-16T21:03:49Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Structures */ Capitalized “Hungarian”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UDF]]&lt;br /&gt;
{{WIP}}This page is still under construction.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A library is a collection of one or more User Defined Functions (UDFs). However, the term UDF is often used to describe the collection as a whole. If a UDF is to be considered for inclusion in the standard set distributed with AutoIt then it must meet all the criteria detailed here, but it&#039;s also good practice to always write in conformance with at least the majority of this document, as that is what will be expected by people reading your code later.&lt;br /&gt;
&lt;br /&gt;
== Basic Requirements ==&lt;br /&gt;
Firstly, the code itself should meet the following basic requirements:&lt;br /&gt;
&lt;br /&gt;
* Be tidied. Just hit &amp;lt;code&amp;gt;Ctrl+T&amp;lt;/code&amp;gt; from SciTE or run Tidy manually. The only flag needed is &amp;lt;code&amp;gt;/sf&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pass Au3Check with no errors using the strictest settings: &amp;lt;code&amp;gt;-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support everything AutoIt supports. In some cases features may not be able to support everything, in which case this should be checked for and return errors appropriately. This applies to: windows OS versions (AutoIt has support for all OS&#039; from windows 2000), unicode and ansi strings, 64 and 32 bit machines.&lt;br /&gt;
* Not use any magic numbers. Ever. None. At all. No excuses.&lt;br /&gt;
&lt;br /&gt;
== UDF Outline ==&lt;br /&gt;
The library itself has a header that details important information such as the minimum OS and AutoIt versions, and what system dlls are required. There is also a number of other sections that are required that list what is present in the UDF.&lt;br /&gt;
&lt;br /&gt;
=== Includes ===&lt;br /&gt;
Since a UDF is designed to define functions, it should only be included once. As a result, the &amp;lt;code&amp;gt;#include-once&amp;lt;/code&amp;gt; directive should be used. This is typically the first line of the UDF, followed by the includes used by the UDF. Include statements should use the double quoted form, as the library is expected to work in the same directory as libraries it depends on. Non standard libraries can be used if necessary, but this should be documented and linked to so users can download it as well. It goes without saying that a UDF based on non-standard UDFs cannot itself become a standard.&lt;br /&gt;
&lt;br /&gt;
=== Index ===&lt;br /&gt;
The index follows the following template (taken from &amp;lt;code&amp;gt;WinAPI.au3&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #INDEX# =======================================================================================================================&lt;br /&gt;
; Title .........: Windows API&lt;br /&gt;
; AutoIt Version : 3.2&lt;br /&gt;
; Description ...: Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Author(s) .....: Paul Campbell (PaulIA), gafrost, Siao, Zedna, arcker, Prog@ndy, PsaltyDS, Raik, jpm&lt;br /&gt;
; Dll ...........: kernel32.dll, user32.dll, gdi32.dll, comdlg32.dll, shell32.dll, ole32.dll, winspool.drv&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The only required element in the index header is &amp;lt;code&amp;gt;Title&amp;lt;/code&amp;gt;. All others are ignored by the processor, but should be included for reference, remember that you can add some custom fields like &amp;lt;code&amp;gt;Links&amp;lt;/code&amp;gt; too.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Dll&amp;lt;/code&amp;gt; field can remain empty in many cases where no dlls are called directly. This header must be defined.&lt;br /&gt;
&lt;br /&gt;
=== Other Sections ===&lt;br /&gt;
Other sections, in order of appearance, are as follows.&lt;br /&gt;
&lt;br /&gt;
==== Variables ====&lt;br /&gt;
All global variables needed to be declared in the UDF are defined in this section. They should follow the variable rules for globals. Individual variables do not need to be documented, as it is assumed they are for internal use only. Any globals designed to be accessible for the user should instead be wrapped by a function (or multiple functions if globals must be retrieved and set). The template for this section is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #VARIABLES# ===================================================================================================================&lt;br /&gt;
Global $__g_vMyGlobal = 0&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If no globals are needed then this section may be ommitted. Please consider the use of global variables carefully, and read through the section on global variables.&lt;br /&gt;
&lt;br /&gt;
==== Constants ====&lt;br /&gt;
Any global constant values are defined in this section. This should be constants only designated for use within the library itself. Constants that may be needed by the user should be defined in a separate file, named &amp;lt;code&amp;gt;UDFConstants.au3&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;UDF&amp;lt;/code&amp;gt; is the name of the parent file. For example &amp;lt;code&amp;gt;File.au3&amp;lt;/code&amp;gt; uses constants defined in &amp;lt;code&amp;gt;FileConstants.au3&amp;lt;/code&amp;gt;. The exception to that rule is control UDFs which miss out the prepended &#039;GUI&#039; when naming constant files, so &amp;lt;code&amp;gt;GUIButton.au3&amp;lt;/code&amp;gt; uses constants from &amp;lt;code&amp;gt;ButtonConstants.au3&amp;lt;/code&amp;gt;. The template for this section is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #CONSTANTS# ===================================================================================================================&lt;br /&gt;
Global Const $__MYUDFCONSTANT_FOOBAR = 42&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If no constants are needed in this section, either because none are used or because they are stored in a separate file, then it may be ommitted. Please read the section on global constants for specific info on naming and definition of constants.&lt;br /&gt;
&lt;br /&gt;
==== Listing ====&lt;br /&gt;
This defines all functions and structures currently used in the library. It MUST be the second defined header item after [[#Index]]. It is a simple list with each function on a line where the functions and structures appear in the same order as they do in the code, which is alphabetical order and structures first. A simple way to generate this list is to create a small script that searches for function definitions and outputs them in the correct format, an example of which is [http://www.autoitscript.com/forum/topic/120820-function-name-lister/ here]. In addition there is a second section that lists functions and structures for internal use only, this does not need to appear if none are defined.&lt;br /&gt;
&lt;br /&gt;
The template for these sections are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #CURRENT# =====================================================================================================================&lt;br /&gt;
;$tagSTRUCT&lt;br /&gt;
;_MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
; #INTERNAL_USE_ONLY# ===========================================================================================================&lt;br /&gt;
;$tagINTERNALSTRUCT&lt;br /&gt;
;__MyUDF_InternalFunction&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section still needs to be defined for files that only define constants. It should also be noted that there MUST NOT be a space between the &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; and the function/structure name.&lt;br /&gt;
&lt;br /&gt;
==== Undocumented Listing ====&lt;br /&gt;
There is a final kind of listing that lists functions for which no documentation exists, or they have been deprecated and are only included for backwards compatibility. These are listed in a section with the header &amp;lt;code&amp;gt;NO_DOC_FUNCTION&amp;lt;/code&amp;gt;. This is very rarely used, and is reserved only for functions that can be utilised by the user, or that would have been in the past, as opposed to those for internal use only.&lt;br /&gt;
&lt;br /&gt;
Template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #NO_DOC_FUNCTION# =============================================================================================================&lt;br /&gt;
;_MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Renamed Functions ====&lt;br /&gt;
Although it should not be the case in new UDFs, many of the older ones (particularly to do with controls) have had script breaking name changes to functions. These are documented in the UDF to ensure updating old scripts is as easy as possible. The basic format for this is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #NO_DOC_FUNCTION# =============================================================================================================&lt;br /&gt;
;_MyUDF_OldFunction                        ; --&amp;gt; _MyUDF_NewFunction&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The space padding is optional. This section is ignored as far as the docs are concerned, and is usually omitted.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Naming ===&lt;br /&gt;
Function names must start with an underscore, and the first word is the library name. There is then usually another underscore before the rest of the function name. The library name should be consistent across all the functions in the library, and can be shortened if a logical abbreviation is available (e.g. &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; ==&amp;gt; &amp;lt;code&amp;gt;Win&amp;lt;/code&amp;gt;). Each word should be capitalized, but no underscores are placed in the rest of the name, for example &amp;lt;code&amp;gt;_WinAPI_GetWindowLong&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For control libraries, the first part of the function name is changed slightly. For example the UDF for listviews would use &amp;lt;code&amp;gt;_GUICtrlListview_*&amp;lt;/code&amp;gt;. When a function wraps a dll call, then the second part should closely resemble the function name as it appears in other languages. This also applies to functions acting as a wrapper to &amp;lt;code&amp;gt;SendMessage&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Functions are defined in alphabetical order by name, which is the same as using &amp;lt;code&amp;gt;Tidy&amp;lt;/code&amp;gt; with the &amp;lt;code&amp;gt;/sf&amp;lt;/code&amp;gt; flag set.&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
Parameters should follow the variable naming scheme ([[#Naming_2|here]]). All parameters must be checked to ensure they are valid, and return unique and documented error codes if they are not. For functions involving a specific type of control, this includes checking the class name using &amp;lt;code&amp;gt;_WinAPI_IsClassName&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Parameters that are optional or byref should be documented as such, and the effect these have explicitly stated. For example a byref parameter should detail exactly what the expected output is as well as the input.&lt;br /&gt;
&lt;br /&gt;
=== Headers ===&lt;br /&gt;
All functions have a documentation header that describes the function. This uses the following template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name...........: _WinAPI_GetMousePos&lt;br /&gt;
; Description ...: Returns the current mouse position&lt;br /&gt;
; Syntax.........: _WinAPI_GetMousePos([$bToClient = False[, $hWnd = 0]])&lt;br /&gt;
; Parameters ....: $bToClient   - If True, the coordinates will be converted to client coordinates&lt;br /&gt;
;                  $hWnd        - Window handle used to convert coordinates if $fToClient is True&lt;br /&gt;
; Return values .: Success      - $tagPOINT structure with current mouse position&lt;br /&gt;
;                  Failure      - 0&lt;br /&gt;
; Author ........: Paul Campbell (PaulIA)&lt;br /&gt;
; Modified.......:&lt;br /&gt;
; Remarks .......: This function takes into account the current MouseCoordMode setting when  obtaining  the  mouse  position.  It&lt;br /&gt;
;                  will also convert screen to client coordinates based on the parameters passed.&lt;br /&gt;
; Related .......: $tagPOINT, _WinAPI_GetMousePosX, _WinAPI_GetMousePosY&lt;br /&gt;
; Link ..........: &lt;br /&gt;
; Example .......: Yes&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _WinAPI_GetMousePos($bToClient = False, $hWnd = 0)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header is 129 characters wide, and any text within it should be wrapped to that length. For example the &amp;lt;code&amp;gt;Remarks&amp;lt;/code&amp;gt; in the above header has been extended to cover two lines. The exception to that rule is the &amp;lt;code&amp;gt;Syntax&amp;lt;/code&amp;gt; line, which should not be wrapped. Some of the parameters in the header are optional, in which case they should remain, but be left empty (for example the &amp;lt;code&amp;gt;Link&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Modified&amp;lt;/code&amp;gt; lines in the above header). In others, they are needed, but can be empty or not used such as &amp;lt;code&amp;gt;Parameters&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Return Values&amp;lt;/code&amp;gt;. In this case the value should be &#039;None&#039;, as they will still be present in the documentation.&lt;br /&gt;
&lt;br /&gt;
There are some flags that can be used within function headers: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;+&#039;&#039;&#039; in column 20 is the continuation flag for the previous line (used in Parameters, Return Values)&lt;br /&gt;
* &#039;&#039;&#039;|&#039;&#039;&#039; in column 20 is a new line in the right side of the table when the help file is generated (used in Parameters, Return Values)&lt;br /&gt;
* &#039;&#039;&#039;-&#039;&#039;&#039; in column 20 will create new row in the table, used for things like Defaults for a style (used in Parameters, Return Values)&lt;br /&gt;
* &#039;&#039;&#039;+&#039;&#039;&#039; in column 2 of Remarks is a blank line&lt;br /&gt;
Name&lt;br /&gt;
:Specifies the name of the function. This will be identical to how it appeas in the Func statement in the code itself.&lt;br /&gt;
Description&lt;br /&gt;
:Gives a short summary of what the function does. This should only be a single line, as it is only designed to give a short impression of what is happening. For the standard set of includes distributed with AutoIt3, this value is also used in the SciTE calltips.&lt;br /&gt;
Syntax&lt;br /&gt;
:Describes the syntax of the function call. This differs slightly from what appears in the code itself for optional parameters, which are enclosed in square brackets (&amp;quot;[ ]&amp;quot;). Since subsequent parameters must also be optional, and cannot be defined unless all the previous ones have been given, these brackets are nested in the form: Function([param1[, param2[,param3]]]). Note that the opening bracket appears before the comma seperator.&lt;br /&gt;
Parameters&lt;br /&gt;
:This is a list of the arguments accepted by the function. Each is listed, followed by a dash (&amp;quot;-&amp;quot;) and a description of what it is. The dash can be padded for neatness, although the amount of padding depends on how long the parameter names are. If the parameter is optional then the meaning of the default value should be given, similarly if it&#039;s used to pass data back to the program in the form of byref then the changes made should also be detailed. For more information on parameters see Parameters.&lt;br /&gt;
Return values&lt;br /&gt;
:Details what is returned by the function. This often comes in the form of Success and Failure values, but this is not always the case. Any setting of the @error of @extended flags should be detailed, along with their meanings, in some cases it is enough to say that @error is set to non-zero in the event of an error, in most cases though a list of values for @error should be given.&lt;br /&gt;
Author&lt;br /&gt;
:This is the original writer of the function. It should contain the username, so that any queries about the code can be made through the forum, but you can give as much or little information as you feel appropriate.&lt;br /&gt;
Modified&lt;br /&gt;
:This is a list of modifications made. At its most basic this is just a list of users who have made changes, but ideally it includes some information about what they did, in which cases it follows the same form as other multi-value lines, with the username and description of modifications seperated by a dash.&lt;br /&gt;
Remarks&lt;br /&gt;
:This is anything the user should know about a function in order to use it. For example exceptional cases and recommended ways to handle the function should all be detailed here, as well as additional info about possible reasons for failure and how to deal with them.&lt;br /&gt;
Related&lt;br /&gt;
:A comma seperated list of functions or structures related to the function.&lt;br /&gt;
Link&lt;br /&gt;
:A link to additional information about the function. For many system function wrappers, this will be &amp;lt;code&amp;gt;@@MsdnLink@@ FunctionName&amp;lt;/code&amp;gt;, which represents that the user should search MSDN for the function.&lt;br /&gt;
Example&lt;br /&gt;
:A simple yes or no value specifying whether the function has an example. If this is no then your UDF is not ready to be released. The [[#Examples]] section has more information on the format and location of examples.&lt;br /&gt;
&lt;br /&gt;
The easiest way to generate the header is to copy and paste the following blank template in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Syntax.........: &lt;br /&gt;
; Parameters ....: &lt;br /&gt;
; Return values .: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Modified.......: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; Link ..........: &lt;br /&gt;
; Example .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are also a number of plugins for SciTE that will generate a header and maybe fill in certain known values for you such as Name, Syntax and Parameters. The most complete one that conforms to these standards is [http://code.google.com/p/m-a-t/wiki/UDFHeaderGenerator here], but there are two others [http://www.autoitscript.com/forum/topic/28270-lua-script-for-udf-header/ here] and [http://www.autoitscript.com/forum/topic/28270-lua-script-for-udf-header/page__view__findpost__p__200823 here].&lt;br /&gt;
&lt;br /&gt;
=== Internal use only ===&lt;br /&gt;
Functions can also be marked for use only within the library and not to be documented for use by the user. These are named according to the same rules as normal functions but begin with a double underscore (&amp;quot;__&amp;quot;). The header is exactly the same except with the first line replaced, to make the blank template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #INTERNAL_USE_ONLY# ===========================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Syntax.........: &lt;br /&gt;
; Parameters ....: &lt;br /&gt;
; Return values .: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Modified.......: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; Link ..........: &lt;br /&gt;
; Example .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
Structures are defined as global constants, and follow the naming pattern &amp;lt;code&amp;gt;$tagSTRUCTNAME&amp;lt;/code&amp;gt;. The struct name should be as it appears on MSDN if it&#039;s used in the windows API, or follow a similar pattern if not. It should go without saying that they must work for both 32 and 64 bit machines, including resolving any alignment issues. Elements should also be named as they appear on MSDN if they are taken from there, which includes the Hungarian notation prefix. Although many standard UDFs do not follow that rule, importantly &amp;lt;code&amp;gt;StructureConstants.au3&amp;lt;/code&amp;gt;, the rule still stands.&lt;br /&gt;
&lt;br /&gt;
=== Headers ===&lt;br /&gt;
Structures need a header similar to functions, but with some minor differences. The same rules apply in terms of wrapping and line length however. The header follow this standard template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #STRUCTURE# ===================================================================================================================&lt;br /&gt;
; Name...........: $tagPOINT&lt;br /&gt;
; Description ...: Defines the x and y coordinates of a point&lt;br /&gt;
; Fields ........: X - Specifies the x-coordinate of the point&lt;br /&gt;
;                  Y - Specifies the y-coordinate of the point&lt;br /&gt;
; Author ........: Paul Campbell (PaulIA)&lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Global Const $tagPOINT = &amp;quot;long X;long Y&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is essentially a shortened header, with the only thing new is the Fields line, which effectively replaces the Parameters field in terms of usage. All the same rules apply as listed [[#Function Header Fields|here]].&lt;br /&gt;
&lt;br /&gt;
The blank template is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #STRUCTURE# ===================================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Fields ........: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Structures may also be marked for internal use only. In this case the header ramains the same, but the sections first line changes. The blank template is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #INTERNAL_USE_ONLY# ===========================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Fields ........: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
For code readability, there are special rules dealing with variables, particularly naming. All variables should be declared at the beginning of their scope, which usually means at the start of the function in which they are used, but could mean the top of the UDF itself in the [[#Variables|Variables section]].&lt;br /&gt;
&lt;br /&gt;
=== Naming ===&lt;br /&gt;
A variable&#039;s first letter signifies the expected scope and type of the variable. See [[Best_coding_practices#Names_of_Variables|Names of Variables]]&lt;br /&gt;
&lt;br /&gt;
=== Globals ===&lt;br /&gt;
The use of globals in a UDF is generally frowned upon, and byref parameters and static variables should be used where possible instead. However, in cases where this is not possible and a global must be used they should be defined using the following naming pattern: &amp;lt;code&amp;gt;$__g_&amp;amp;lt;VARNAME&amp;amp;gt;&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;&amp;amp;lt;VARNAME&amp;amp;gt;&amp;lt;/code&amp;gt; is the name as it would usually appear according to the variable naming rules above. This ensures there will never be a conflict with user variables of other UDF globals. They should be declared at the top of the UDF in the Variables section.&lt;br /&gt;
&lt;br /&gt;
Globals are always private. If they need to be accessed by the user then functions need to be written wrapping that operation and values should be checked. Notable exceptions are debug variables, which are designed for developer purposes and may be used by some users in extreme cases. These are named &amp;lt;code&amp;gt;$Debug_&amp;amp;lt;UDF&amp;amp;gt;&amp;lt;/code&amp;gt; although the &amp;lt;code&amp;gt;&amp;amp;lt;UDF&amp;amp;gt;&amp;lt;/code&amp;gt; part is often shortened so &amp;lt;code&amp;gt;GUIEdit.au3&amp;lt;/code&amp;gt; uses &amp;lt;code&amp;gt;$Debug_Ed&amp;lt;/code&amp;gt;. It is not required that a UDF has debugging symbols, but they are allowed to remain in releases.&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
There are two types of constants, internal and public. Public constants are designed to be utilised by the user, and are referenced in functions that use them. They include styles and flags. Internal constants are designed for use only within the library, so that values used fairly often can be held in one place to allow for easy updating. Both kinds of constant are always typed in all upper case. Constants taken from the windows API should appear exactly as they are defined there, but internal constants follow the naming pattern: &amp;lt;code&amp;gt;$__&amp;amp;lt;UDF&amp;amp;gt;CONSTANT_&amp;amp;lt;NAME&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The &amp;lt;code&amp;gt;Dim&amp;lt;/code&amp;gt; statement ===&lt;br /&gt;
Should not be used.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
All functions and structures that are made public to the user need to have a good quality example. This means that it should:&lt;br /&gt;
&lt;br /&gt;
* Be simple. Ideally the only functions used are basic functions like ConsoleWrite and MsgBox and the function that the example is written for. Writing a single example that covers a wide range of functions is not nearly as easy to use as writing an example per function that clearly demonstrates its use.&lt;br /&gt;
* Be readable. Everything should be explained step by step in comments.&lt;br /&gt;
* Be correct. In addition to passing the same Au3Check flags as the UDF itself (&amp;lt;code&amp;gt;-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7&amp;lt;/code&amp;gt;) it should always be written with best practice being the main consideration. This takes preference over the first point, just because code is shorter and looks easier doesn&#039;t mean it&#039;s right.&lt;br /&gt;
* Examples should represent all the functionality. If there is more than one way of using a function then include more than one example of how to use it.&lt;br /&gt;
* Not make any permanent changes to the users computer. For example, if demonstrating a File function, be sure to delete the file after it has been used. The same applies for any function that makes a change to the environment: the changes MUST be undone.&lt;br /&gt;
&lt;br /&gt;
Always remember, the readability of code in an example is MORE important than the readability of code inside the UDF itself.&lt;br /&gt;
&lt;br /&gt;
Examples are stored in script files called &amp;lt;code&amp;gt;&amp;amp;lt;FUNCTION&amp;amp;gt;.au3&amp;lt;/code&amp;gt;. The files should be kept in a folder called &amp;lt;code&amp;gt;Examples&amp;lt;/code&amp;gt;. To remain correct all examples should be wrapped in functions, such that the only code executed in the global scope is calling the function. This is usually named &amp;lt;code&amp;gt;Example&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;#include &amp;lt;Constants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;GUIConstantsEx.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opt(&amp;quot;MustDeclareVars&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $idButton_Run, $idButton_Test, $iMsg, $hGUI_MyApp&lt;br /&gt;
	&lt;br /&gt;
	$hGUI_MyApp = GUICreate(&amp;quot;My GUI Button&amp;quot;) ; Will create a dialog box that when displayed is centered&lt;br /&gt;
&lt;br /&gt;
	$idButton_Run = GUICtrlCreateButton(&amp;quot;Run Notepad&amp;quot;, 4, 4, 80, 30)&lt;br /&gt;
	$idButton_Test = GUICtrlCreateButton(&amp;quot;Button Test&amp;quot;, 4, 38, 80, 30)&lt;br /&gt;
&lt;br /&gt;
	GUISetState() ; will display a dialog box with 2 button&lt;br /&gt;
&lt;br /&gt;
	; Run the GUI until the dialog is closed&lt;br /&gt;
	While 1&lt;br /&gt;
		$iMsg = GUIGetMsg()&lt;br /&gt;
		Select&lt;br /&gt;
			Case $iMsg = $GUI_EVENT_CLOSE&lt;br /&gt;
				ExitLoop&lt;br /&gt;
			Case $iMsg = $idButton_Run&lt;br /&gt;
				Run(&amp;quot;Notepad.exe&amp;quot;) ; Will Run/Open Notepad&lt;br /&gt;
			Case $iMsg = $idButton_Test&lt;br /&gt;
				MsgBox($MB_SYSTEMMODAL, &amp;quot;Testing&amp;quot;, &amp;quot;Button 2 was pressed&amp;quot;) ; Will demonstrate Button 2 being pressed&lt;br /&gt;
		EndSelect&lt;br /&gt;
	WEnd&lt;br /&gt;
	GUIDelete($hGUI_MyApp)&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple Examples ===&lt;br /&gt;
The helpfile now supports multiple examples per function. In order to maintain backwards compatibility with any other tools that use examples, the first file is still named &amp;lt;code&amp;gt;&amp;amp;lt;FUNCTION&amp;amp;gt;.au3&amp;lt;/code&amp;gt;, but any additional examples are named &amp;lt;code&amp;gt;&amp;amp;lt;FUNCTION&amp;amp;gt;[n].au3&amp;lt;/code&amp;gt; where n is an integer counter starting at 2.&lt;br /&gt;
&lt;br /&gt;
== Template UDF ==&lt;br /&gt;
Here is an example of a UDF called &amp;lt;code&amp;gt;MyUDF.au3&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; AU3Check settings&lt;br /&gt;
#AutoIt3Wrapper_Run_AU3Check=Y&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7&lt;br /&gt;
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y&lt;br /&gt;
#include-once&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;MyUDFConstants.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;AnInclude.au3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Title .........: MyUDF&lt;br /&gt;
; AutoIt Version : 3.3.10.2&lt;br /&gt;
; Language ......: English&lt;br /&gt;
; Author(s) .....: &lt;br /&gt;
; Modifiers .....: &lt;br /&gt;
; Forum link ....: a link to the main forum topic (if aplicable)&lt;br /&gt;
; Description ...: An example UDF that does very little.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
; #CURRENT# =====================================================================================================================&lt;br /&gt;
;$tagMYSTRUCT&lt;br /&gt;
;_MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
; #STRUCTURE# ===================================================================================================================&lt;br /&gt;
; Name...........: $tagMYSTRUCT&lt;br /&gt;
; Description ...: An example of a structure.&lt;br /&gt;
; Fields ........: hFoo       - A handle to foo that does something.&lt;br /&gt;
;                  iBar       - An integer that does something.&lt;br /&gt;
; Author ........: Matt Diesel (Mat)&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Global Const $tagMYSTRUCT = &amp;quot;ptr hFoo; int iBar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name...........: _MyUDF_Function&lt;br /&gt;
; Description ...: A function that does something.&lt;br /&gt;
; Syntax.........: _MyUDF_Function(ByRef $avAnArray, $iAnInt[, $hAHandle = 0[, $nSomeNumber = 42]])&lt;br /&gt;
; Parameters ....: $avAnArray       - [byref] An array of anything. The value of anything is changed and passed out using this&lt;br /&gt;
;                                     parameter. The array should only have one dimension&lt;br /&gt;
;                  $iAnInt          - An integer that does very little.&lt;br /&gt;
;                  $hAHandle        - [optional] A handle. Default is zero.&lt;br /&gt;
;                  $nSomeNumber     - [optional] A number of some kind. Default is 42.&lt;br /&gt;
; Return values .: Success          - A MYSTRUCT structure.&lt;br /&gt;
;                  Failure          - Returns zero and sets the @error flag:&lt;br /&gt;
;                                   |1 - The $avAnArray is invalid.&lt;br /&gt;
; Author ........: Matt Diesel (Mat)&lt;br /&gt;
; Modified.......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: $tagMYSTRUCT&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _MyUDF_Function(ByRef $avAnArray, $iAnInt, $hAHandle = 0, $nSomeNumber = 42)&lt;br /&gt;
	; 1 - Error Checking for parameters.&lt;br /&gt;
	If Not IsArray($avAnArray) Or UBound($avAnArray, 0) &amp;lt;&amp;gt; 1 Then Return SetError(1, 0, 0) ; The $avAnArray is invalid.&lt;br /&gt;
&lt;br /&gt;
	; 2 - Declaration of locals.&lt;br /&gt;
	Local $tMS = DllStructCreate($tagMYSTRUCT)&lt;br /&gt;
&lt;br /&gt;
	; 3 - Function code&lt;br /&gt;
	DllStructSetData($tMS, &amp;quot;hFoo&amp;quot;, $hAHandle)&lt;br /&gt;
	DllStructSetData($tMS, &amp;quot;iBar&amp;quot;, $iAnInt * $nSomeNumber)&lt;br /&gt;
&lt;br /&gt;
	Return $tMS&lt;br /&gt;
EndFunc   ;==&amp;gt;_MyUDF_Function&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=UDF-spec&amp;diff=14097</id>
		<title>UDF-spec</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=UDF-spec&amp;diff=14097"/>
		<updated>2019-10-16T20:49:35Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Headers */  Removed apostrophe from “it’s” in Modified subsection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UDF]]&lt;br /&gt;
{{WIP}}This page is still under construction.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
A library is a collection of one or more User Defined Functions (UDFs). However, the term UDF is often used to describe the collection as a whole. If a UDF is to be considered for inclusion in the standard set distributed with AutoIt then it must meet all the criteria detailed here, but it&#039;s also good practice to always write in conformance with at least the majority of this document, as that is what will be expected by people reading your code later.&lt;br /&gt;
&lt;br /&gt;
== Basic Requirements ==&lt;br /&gt;
Firstly, the code itself should meet the following basic requirements:&lt;br /&gt;
&lt;br /&gt;
* Be tidied. Just hit &amp;lt;code&amp;gt;Ctrl+T&amp;lt;/code&amp;gt; from SciTE or run Tidy manually. The only flag needed is &amp;lt;code&amp;gt;/sf&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pass Au3Check with no errors using the strictest settings: &amp;lt;code&amp;gt;-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support everything AutoIt supports. In some cases features may not be able to support everything, in which case this should be checked for and return errors appropriately. This applies to: windows OS versions (AutoIt has support for all OS&#039; from windows 2000), unicode and ansi strings, 64 and 32 bit machines.&lt;br /&gt;
* Not use any magic numbers. Ever. None. At all. No excuses.&lt;br /&gt;
&lt;br /&gt;
== UDF Outline ==&lt;br /&gt;
The library itself has a header that details important information such as the minimum OS and AutoIt versions, and what system dlls are required. There is also a number of other sections that are required that list what is present in the UDF.&lt;br /&gt;
&lt;br /&gt;
=== Includes ===&lt;br /&gt;
Since a UDF is designed to define functions, it should only be included once. As a result, the &amp;lt;code&amp;gt;#include-once&amp;lt;/code&amp;gt; directive should be used. This is typically the first line of the UDF, followed by the includes used by the UDF. Include statements should use the double quoted form, as the library is expected to work in the same directory as libraries it depends on. Non standard libraries can be used if necessary, but this should be documented and linked to so users can download it as well. It goes without saying that a UDF based on non-standard UDFs cannot itself become a standard.&lt;br /&gt;
&lt;br /&gt;
=== Index ===&lt;br /&gt;
The index follows the following template (taken from &amp;lt;code&amp;gt;WinAPI.au3&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #INDEX# =======================================================================================================================&lt;br /&gt;
; Title .........: Windows API&lt;br /&gt;
; AutoIt Version : 3.2&lt;br /&gt;
; Description ...: Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Author(s) .....: Paul Campbell (PaulIA), gafrost, Siao, Zedna, arcker, Prog@ndy, PsaltyDS, Raik, jpm&lt;br /&gt;
; Dll ...........: kernel32.dll, user32.dll, gdi32.dll, comdlg32.dll, shell32.dll, ole32.dll, winspool.drv&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The only required element in the index header is &amp;lt;code&amp;gt;Title&amp;lt;/code&amp;gt;. All others are ignored by the processor, but should be included for reference, remember that you can add some custom fields like &amp;lt;code&amp;gt;Links&amp;lt;/code&amp;gt; too.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Dll&amp;lt;/code&amp;gt; field can remain empty in many cases where no dlls are called directly. This header must be defined.&lt;br /&gt;
&lt;br /&gt;
=== Other Sections ===&lt;br /&gt;
Other sections, in order of appearance, are as follows.&lt;br /&gt;
&lt;br /&gt;
==== Variables ====&lt;br /&gt;
All global variables needed to be declared in the UDF are defined in this section. They should follow the variable rules for globals. Individual variables do not need to be documented, as it is assumed they are for internal use only. Any globals designed to be accessible for the user should instead be wrapped by a function (or multiple functions if globals must be retrieved and set). The template for this section is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #VARIABLES# ===================================================================================================================&lt;br /&gt;
Global $__g_vMyGlobal = 0&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If no globals are needed then this section may be ommitted. Please consider the use of global variables carefully, and read through the section on global variables.&lt;br /&gt;
&lt;br /&gt;
==== Constants ====&lt;br /&gt;
Any global constant values are defined in this section. This should be constants only designated for use within the library itself. Constants that may be needed by the user should be defined in a separate file, named &amp;lt;code&amp;gt;UDFConstants.au3&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;UDF&amp;lt;/code&amp;gt; is the name of the parent file. For example &amp;lt;code&amp;gt;File.au3&amp;lt;/code&amp;gt; uses constants defined in &amp;lt;code&amp;gt;FileConstants.au3&amp;lt;/code&amp;gt;. The exception to that rule is control UDFs which miss out the prepended &#039;GUI&#039; when naming constant files, so &amp;lt;code&amp;gt;GUIButton.au3&amp;lt;/code&amp;gt; uses constants from &amp;lt;code&amp;gt;ButtonConstants.au3&amp;lt;/code&amp;gt;. The template for this section is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #CONSTANTS# ===================================================================================================================&lt;br /&gt;
Global Const $__MYUDFCONSTANT_FOOBAR = 42&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If no constants are needed in this section, either because none are used or because they are stored in a separate file, then it may be ommitted. Please read the section on global constants for specific info on naming and definition of constants.&lt;br /&gt;
&lt;br /&gt;
==== Listing ====&lt;br /&gt;
This defines all functions and structures currently used in the library. It MUST be the second defined header item after [[#Index]]. It is a simple list with each function on a line where the functions and structures appear in the same order as they do in the code, which is alphabetical order and structures first. A simple way to generate this list is to create a small script that searches for function definitions and outputs them in the correct format, an example of which is [http://www.autoitscript.com/forum/topic/120820-function-name-lister/ here]. In addition there is a second section that lists functions and structures for internal use only, this does not need to appear if none are defined.&lt;br /&gt;
&lt;br /&gt;
The template for these sections are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #CURRENT# =====================================================================================================================&lt;br /&gt;
;$tagSTRUCT&lt;br /&gt;
;_MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
; #INTERNAL_USE_ONLY# ===========================================================================================================&lt;br /&gt;
;$tagINTERNALSTRUCT&lt;br /&gt;
;__MyUDF_InternalFunction&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section still needs to be defined for files that only define constants. It should also be noted that there MUST NOT be a space between the &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; and the function/structure name.&lt;br /&gt;
&lt;br /&gt;
==== Undocumented Listing ====&lt;br /&gt;
There is a final kind of listing that lists functions for which no documentation exists, or they have been deprecated and are only included for backwards compatibility. These are listed in a section with the header &amp;lt;code&amp;gt;NO_DOC_FUNCTION&amp;lt;/code&amp;gt;. This is very rarely used, and is reserved only for functions that can be utilised by the user, or that would have been in the past, as opposed to those for internal use only.&lt;br /&gt;
&lt;br /&gt;
Template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #NO_DOC_FUNCTION# =============================================================================================================&lt;br /&gt;
;_MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Renamed Functions ====&lt;br /&gt;
Although it should not be the case in new UDFs, many of the older ones (particularly to do with controls) have had script breaking name changes to functions. These are documented in the UDF to ensure updating old scripts is as easy as possible. The basic format for this is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #NO_DOC_FUNCTION# =============================================================================================================&lt;br /&gt;
;_MyUDF_OldFunction                        ; --&amp;gt; _MyUDF_NewFunction&lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The space padding is optional. This section is ignored as far as the docs are concerned, and is usually omitted.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Naming ===&lt;br /&gt;
Function names must start with an underscore, and the first word is the library name. There is then usually another underscore before the rest of the function name. The library name should be consistent across all the functions in the library, and can be shortened if a logical abbreviation is available (e.g. &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; ==&amp;gt; &amp;lt;code&amp;gt;Win&amp;lt;/code&amp;gt;). Each word should be capitalized, but no underscores are placed in the rest of the name, for example &amp;lt;code&amp;gt;_WinAPI_GetWindowLong&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For control libraries, the first part of the function name is changed slightly. For example the UDF for listviews would use &amp;lt;code&amp;gt;_GUICtrlListview_*&amp;lt;/code&amp;gt;. When a function wraps a dll call, then the second part should closely resemble the function name as it appears in other languages. This also applies to functions acting as a wrapper to &amp;lt;code&amp;gt;SendMessage&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Functions are defined in alphabetical order by name, which is the same as using &amp;lt;code&amp;gt;Tidy&amp;lt;/code&amp;gt; with the &amp;lt;code&amp;gt;/sf&amp;lt;/code&amp;gt; flag set.&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
Parameters should follow the variable naming scheme ([[#Naming_2|here]]). All parameters must be checked to ensure they are valid, and return unique and documented error codes if they are not. For functions involving a specific type of control, this includes checking the class name using &amp;lt;code&amp;gt;_WinAPI_IsClassName&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Parameters that are optional or byref should be documented as such, and the effect these have explicitly stated. For example a byref parameter should detail exactly what the expected output is as well as the input.&lt;br /&gt;
&lt;br /&gt;
=== Headers ===&lt;br /&gt;
All functions have a documentation header that describes the function. This uses the following template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name...........: _WinAPI_GetMousePos&lt;br /&gt;
; Description ...: Returns the current mouse position&lt;br /&gt;
; Syntax.........: _WinAPI_GetMousePos([$bToClient = False[, $hWnd = 0]])&lt;br /&gt;
; Parameters ....: $bToClient   - If True, the coordinates will be converted to client coordinates&lt;br /&gt;
;                  $hWnd        - Window handle used to convert coordinates if $fToClient is True&lt;br /&gt;
; Return values .: Success      - $tagPOINT structure with current mouse position&lt;br /&gt;
;                  Failure      - 0&lt;br /&gt;
; Author ........: Paul Campbell (PaulIA)&lt;br /&gt;
; Modified.......:&lt;br /&gt;
; Remarks .......: This function takes into account the current MouseCoordMode setting when  obtaining  the  mouse  position.  It&lt;br /&gt;
;                  will also convert screen to client coordinates based on the parameters passed.&lt;br /&gt;
; Related .......: $tagPOINT, _WinAPI_GetMousePosX, _WinAPI_GetMousePosY&lt;br /&gt;
; Link ..........: &lt;br /&gt;
; Example .......: Yes&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _WinAPI_GetMousePos($bToClient = False, $hWnd = 0)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header is 129 characters wide, and any text within it should be wrapped to that length. For example the &amp;lt;code&amp;gt;Remarks&amp;lt;/code&amp;gt; in the above header has been extended to cover two lines. The exception to that rule is the &amp;lt;code&amp;gt;Syntax&amp;lt;/code&amp;gt; line, which should not be wrapped. Some of the parameters in the header are optional, in which case they should remain, but be left empty (for example the &amp;lt;code&amp;gt;Link&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Modified&amp;lt;/code&amp;gt; lines in the above header). In others, they are needed, but can be empty or not used such as &amp;lt;code&amp;gt;Parameters&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Return Values&amp;lt;/code&amp;gt;. In this case the value should be &#039;None&#039;, as they will still be present in the documentation.&lt;br /&gt;
&lt;br /&gt;
There are some flags that can be used within function headers: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;+&#039;&#039;&#039; in column 20 is the continuation flag for the previous line (used in Parameters, Return Values)&lt;br /&gt;
* &#039;&#039;&#039;|&#039;&#039;&#039; in column 20 is a new line in the right side of the table when the help file is generated (used in Parameters, Return Values)&lt;br /&gt;
* &#039;&#039;&#039;-&#039;&#039;&#039; in column 20 will create new row in the table, used for things like Defaults for a style (used in Parameters, Return Values)&lt;br /&gt;
* &#039;&#039;&#039;+&#039;&#039;&#039; in column 2 of Remarks is a blank line&lt;br /&gt;
Name&lt;br /&gt;
:Specifies the name of the function. This will be identical to how it appeas in the Func statement in the code itself.&lt;br /&gt;
Description&lt;br /&gt;
:Gives a short summary of what the function does. This should only be a single line, as it is only designed to give a short impression of what is happening. For the standard set of includes distributed with AutoIt3, this value is also used in the SciTE calltips.&lt;br /&gt;
Syntax&lt;br /&gt;
:Describes the syntax of the function call. This differs slightly from what appears in the code itself for optional parameters, which are enclosed in square brackets (&amp;quot;[ ]&amp;quot;). Since subsequent parameters must also be optional, and cannot be defined unless all the previous ones have been given, these brackets are nested in the form: Function([param1[, param2[,param3]]]). Note that the opening bracket appears before the comma seperator.&lt;br /&gt;
Parameters&lt;br /&gt;
:This is a list of the arguments accepted by the function. Each is listed, followed by a dash (&amp;quot;-&amp;quot;) and a description of what it is. The dash can be padded for neatness, although the amount of padding depends on how long the parameter names are. If the parameter is optional then the meaning of the default value should be given, similarly if it&#039;s used to pass data back to the program in the form of byref then the changes made should also be detailed. For more information on parameters see Parameters.&lt;br /&gt;
Return values&lt;br /&gt;
:Details what is returned by the function. This often comes in the form of Success and Failure values, but this is not always the case. Any setting of the @error of @extended flags should be detailed, along with their meanings, in some cases it is enough to say that @error is set to non-zero in the event of an error, in most cases though a list of values for @error should be given.&lt;br /&gt;
Author&lt;br /&gt;
:This is the original writer of the function. It should contain the username, so that any queries about the code can be made through the forum, but you can give as much or little information as you feel appropriate.&lt;br /&gt;
Modified&lt;br /&gt;
:This is a list of modifications made. At its most basic this is just a list of users who have made changes, but ideally it includes some information about what they did, in which cases it follows the same form as other multi-value lines, with the username and description of modifications seperated by a dash.&lt;br /&gt;
Remarks&lt;br /&gt;
:This is anything the user should know about a function in order to use it. For example exceptional cases and recommended ways to handle the function should all be detailed here, as well as additional info about possible reasons for failure and how to deal with them.&lt;br /&gt;
Related&lt;br /&gt;
:A comma seperated list of functions or structures related to the function.&lt;br /&gt;
Link&lt;br /&gt;
:A link to additional information about the function. For many system function wrappers, this will be &amp;lt;code&amp;gt;@@MsdnLink@@ FunctionName&amp;lt;/code&amp;gt;, which represents that the user should search MSDN for the function.&lt;br /&gt;
Example&lt;br /&gt;
:A simple yes or no value specifying whether the function has an example. If this is no then your UDF is not ready to be released. The [[#Examples]] section has more information on the format and location of examples.&lt;br /&gt;
&lt;br /&gt;
The easiest way to generate the header is to copy and paste the following blank template in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Syntax.........: &lt;br /&gt;
; Parameters ....: &lt;br /&gt;
; Return values .: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Modified.......: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; Link ..........: &lt;br /&gt;
; Example .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are also a number of plugins for SciTE that will generate a header and maybe fill in certain known values for you such as Name, Syntax and Parameters. The most complete one that conforms to these standards is [http://code.google.com/p/m-a-t/wiki/UDFHeaderGenerator here], but there are two others [http://www.autoitscript.com/forum/topic/28270-lua-script-for-udf-header/ here] and [http://www.autoitscript.com/forum/topic/28270-lua-script-for-udf-header/page__view__findpost__p__200823 here].&lt;br /&gt;
&lt;br /&gt;
=== Internal use only ===&lt;br /&gt;
Functions can also be marked for use only within the library and not to be documented for use by the user. These are named according to the same rules as normal functions but begin with a double underscore (&amp;quot;__&amp;quot;). The header is exactly the same except with the first line replaced, to make the blank template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #INTERNAL_USE_ONLY# ===========================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Syntax.........: &lt;br /&gt;
; Parameters ....: &lt;br /&gt;
; Return values .: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Modified.......: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; Link ..........: &lt;br /&gt;
; Example .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
Structures are defined as global constants, and follow the naming pattern &amp;lt;code&amp;gt;$tagSTRUCTNAME&amp;lt;/code&amp;gt;. The struct name should be as it appears on MSDN if it&#039;s used in the windows API, or follow a similar pattern if not. It should go without saying that they must work for both 32 and 64 bit machines, including resolving any alignment issues. Elements should also be named as they appear on MSDN if they are taken from there, which includes the hungarian notation prefix. Although many standard UDFs do not follow that rule, importantly &amp;lt;code&amp;gt;StructureConstants.au3&amp;lt;/code&amp;gt;, the rule still stands.&lt;br /&gt;
&lt;br /&gt;
=== Headers ===&lt;br /&gt;
Structures need a header similar to functions, but with some minor differences. The same rules apply in terms of wrapping and line length however. The header follow this standard template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #STRUCTURE# ===================================================================================================================&lt;br /&gt;
; Name...........: $tagPOINT&lt;br /&gt;
; Description ...: Defines the x and y coordinates of a point&lt;br /&gt;
; Fields ........: X - Specifies the x-coordinate of the point&lt;br /&gt;
;                  Y - Specifies the y-coordinate of the point&lt;br /&gt;
; Author ........: Paul Campbell (PaulIA)&lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Global Const $tagPOINT = &amp;quot;long X;long Y&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is essentially a shortened header, with the only thing new is the Fields line, which effectively replaces the Parameters field in terms of usage. All the same rules apply as listed [[#Function Header Fields|here]].&lt;br /&gt;
&lt;br /&gt;
The blank template is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #STRUCTURE# ===================================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Fields ........: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Structures may also be marked for internal use only. In this case the header ramains the same, but the sections first line changes. The blank template is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;; #INTERNAL_USE_ONLY# ===========================================================================================================&lt;br /&gt;
; Name...........: &lt;br /&gt;
; Description ...: &lt;br /&gt;
; Fields ........: &lt;br /&gt;
; Author ........: &lt;br /&gt;
; Remarks .......: &lt;br /&gt;
; Related .......: &lt;br /&gt;
; ===============================================================================================================================&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
For code readability, there are special rules dealing with variables, particularly naming. All variables should be declared at the beginning of their scope, which usually means at the start of the function in which they are used, but could mean the top of the UDF itself in the [[#Variables|Variables section]].&lt;br /&gt;
&lt;br /&gt;
=== Naming ===&lt;br /&gt;
A variable&#039;s first letter signifies the expected scope and type of the variable. See [[Best_coding_practices#Names_of_Variables|Names of Variables]]&lt;br /&gt;
&lt;br /&gt;
=== Globals ===&lt;br /&gt;
The use of globals in a UDF is generally frowned upon, and byref parameters and static variables should be used where possible instead. However, in cases where this is not possible and a global must be used they should be defined using the following naming pattern: &amp;lt;code&amp;gt;$__g_&amp;amp;lt;VARNAME&amp;amp;gt;&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;&amp;amp;lt;VARNAME&amp;amp;gt;&amp;lt;/code&amp;gt; is the name as it would usually appear according to the variable naming rules above. This ensures there will never be a conflict with user variables of other UDF globals. They should be declared at the top of the UDF in the Variables section.&lt;br /&gt;
&lt;br /&gt;
Globals are always private. If they need to be accessed by the user then functions need to be written wrapping that operation and values should be checked. Notable exceptions are debug variables, which are designed for developer purposes and may be used by some users in extreme cases. These are named &amp;lt;code&amp;gt;$Debug_&amp;amp;lt;UDF&amp;amp;gt;&amp;lt;/code&amp;gt; although the &amp;lt;code&amp;gt;&amp;amp;lt;UDF&amp;amp;gt;&amp;lt;/code&amp;gt; part is often shortened so &amp;lt;code&amp;gt;GUIEdit.au3&amp;lt;/code&amp;gt; uses &amp;lt;code&amp;gt;$Debug_Ed&amp;lt;/code&amp;gt;. It is not required that a UDF has debugging symbols, but they are allowed to remain in releases.&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
There are two types of constants, internal and public. Public constants are designed to be utilised by the user, and are referenced in functions that use them. They include styles and flags. Internal constants are designed for use only within the library, so that values used fairly often can be held in one place to allow for easy updating. Both kinds of constant are always typed in all upper case. Constants taken from the windows API should appear exactly as they are defined there, but internal constants follow the naming pattern: &amp;lt;code&amp;gt;$__&amp;amp;lt;UDF&amp;amp;gt;CONSTANT_&amp;amp;lt;NAME&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The &amp;lt;code&amp;gt;Dim&amp;lt;/code&amp;gt; statement ===&lt;br /&gt;
Should not be used.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
All functions and structures that are made public to the user need to have a good quality example. This means that it should:&lt;br /&gt;
&lt;br /&gt;
* Be simple. Ideally the only functions used are basic functions like ConsoleWrite and MsgBox and the function that the example is written for. Writing a single example that covers a wide range of functions is not nearly as easy to use as writing an example per function that clearly demonstrates its use.&lt;br /&gt;
* Be readable. Everything should be explained step by step in comments.&lt;br /&gt;
* Be correct. In addition to passing the same Au3Check flags as the UDF itself (&amp;lt;code&amp;gt;-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7&amp;lt;/code&amp;gt;) it should always be written with best practice being the main consideration. This takes preference over the first point, just because code is shorter and looks easier doesn&#039;t mean it&#039;s right.&lt;br /&gt;
* Examples should represent all the functionality. If there is more than one way of using a function then include more than one example of how to use it.&lt;br /&gt;
* Not make any permanent changes to the users computer. For example, if demonstrating a File function, be sure to delete the file after it has been used. The same applies for any function that makes a change to the environment: the changes MUST be undone.&lt;br /&gt;
&lt;br /&gt;
Always remember, the readability of code in an example is MORE important than the readability of code inside the UDF itself.&lt;br /&gt;
&lt;br /&gt;
Examples are stored in script files called &amp;lt;code&amp;gt;&amp;amp;lt;FUNCTION&amp;amp;gt;.au3&amp;lt;/code&amp;gt;. The files should be kept in a folder called &amp;lt;code&amp;gt;Examples&amp;lt;/code&amp;gt;. To remain correct all examples should be wrapped in functions, such that the only code executed in the global scope is calling the function. This is usually named &amp;lt;code&amp;gt;Example&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;#include &amp;lt;Constants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;GUIConstantsEx.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opt(&amp;quot;MustDeclareVars&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
Example()&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $idButton_Run, $idButton_Test, $iMsg, $hGUI_MyApp&lt;br /&gt;
	&lt;br /&gt;
	$hGUI_MyApp = GUICreate(&amp;quot;My GUI Button&amp;quot;) ; Will create a dialog box that when displayed is centered&lt;br /&gt;
&lt;br /&gt;
	$idButton_Run = GUICtrlCreateButton(&amp;quot;Run Notepad&amp;quot;, 4, 4, 80, 30)&lt;br /&gt;
	$idButton_Test = GUICtrlCreateButton(&amp;quot;Button Test&amp;quot;, 4, 38, 80, 30)&lt;br /&gt;
&lt;br /&gt;
	GUISetState() ; will display a dialog box with 2 button&lt;br /&gt;
&lt;br /&gt;
	; Run the GUI until the dialog is closed&lt;br /&gt;
	While 1&lt;br /&gt;
		$iMsg = GUIGetMsg()&lt;br /&gt;
		Select&lt;br /&gt;
			Case $iMsg = $GUI_EVENT_CLOSE&lt;br /&gt;
				ExitLoop&lt;br /&gt;
			Case $iMsg = $idButton_Run&lt;br /&gt;
				Run(&amp;quot;Notepad.exe&amp;quot;) ; Will Run/Open Notepad&lt;br /&gt;
			Case $iMsg = $idButton_Test&lt;br /&gt;
				MsgBox($MB_SYSTEMMODAL, &amp;quot;Testing&amp;quot;, &amp;quot;Button 2 was pressed&amp;quot;) ; Will demonstrate Button 2 being pressed&lt;br /&gt;
		EndSelect&lt;br /&gt;
	WEnd&lt;br /&gt;
	GUIDelete($hGUI_MyApp)&lt;br /&gt;
EndFunc   ;==&amp;gt;Example&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple Examples ===&lt;br /&gt;
The helpfile now supports multiple examples per function. In order to maintain backwards compatibility with any other tools that use examples, the first file is still named &amp;lt;code&amp;gt;&amp;amp;lt;FUNCTION&amp;amp;gt;.au3&amp;lt;/code&amp;gt;, but any additional examples are named &amp;lt;code&amp;gt;&amp;amp;lt;FUNCTION&amp;amp;gt;[n].au3&amp;lt;/code&amp;gt; where n is an integer counter starting at 2.&lt;br /&gt;
&lt;br /&gt;
== Template UDF ==&lt;br /&gt;
Here is an example of a UDF called &amp;lt;code&amp;gt;MyUDF.au3&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; AU3Check settings&lt;br /&gt;
#AutoIt3Wrapper_Run_AU3Check=Y&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7&lt;br /&gt;
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y&lt;br /&gt;
#include-once&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;MyUDFConstants.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;AnInclude.au3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Title .........: MyUDF&lt;br /&gt;
; AutoIt Version : 3.3.10.2&lt;br /&gt;
; Language ......: English&lt;br /&gt;
; Author(s) .....: &lt;br /&gt;
; Modifiers .....: &lt;br /&gt;
; Forum link ....: a link to the main forum topic (if aplicable)&lt;br /&gt;
; Description ...: An example UDF that does very little.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
; #CURRENT# =====================================================================================================================&lt;br /&gt;
;$tagMYSTRUCT&lt;br /&gt;
;_MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
; #STRUCTURE# ===================================================================================================================&lt;br /&gt;
; Name...........: $tagMYSTRUCT&lt;br /&gt;
; Description ...: An example of a structure.&lt;br /&gt;
; Fields ........: hFoo       - A handle to foo that does something.&lt;br /&gt;
;                  iBar       - An integer that does something.&lt;br /&gt;
; Author ........: Matt Diesel (Mat)&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _MyUDF_Function&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Global Const $tagMYSTRUCT = &amp;quot;ptr hFoo; int iBar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name...........: _MyUDF_Function&lt;br /&gt;
; Description ...: A function that does something.&lt;br /&gt;
; Syntax.........: _MyUDF_Function(ByRef $avAnArray, $iAnInt[, $hAHandle = 0[, $nSomeNumber = 42]])&lt;br /&gt;
; Parameters ....: $avAnArray       - [byref] An array of anything. The value of anything is changed and passed out using this&lt;br /&gt;
;                                     parameter. The array should only have one dimension&lt;br /&gt;
;                  $iAnInt          - An integer that does very little.&lt;br /&gt;
;                  $hAHandle        - [optional] A handle. Default is zero.&lt;br /&gt;
;                  $nSomeNumber     - [optional] A number of some kind. Default is 42.&lt;br /&gt;
; Return values .: Success          - A MYSTRUCT structure.&lt;br /&gt;
;                  Failure          - Returns zero and sets the @error flag:&lt;br /&gt;
;                                   |1 - The $avAnArray is invalid.&lt;br /&gt;
; Author ........: Matt Diesel (Mat)&lt;br /&gt;
; Modified.......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: $tagMYSTRUCT&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _MyUDF_Function(ByRef $avAnArray, $iAnInt, $hAHandle = 0, $nSomeNumber = 42)&lt;br /&gt;
	; 1 - Error Checking for parameters.&lt;br /&gt;
	If Not IsArray($avAnArray) Or UBound($avAnArray, 0) &amp;lt;&amp;gt; 1 Then Return SetError(1, 0, 0) ; The $avAnArray is invalid.&lt;br /&gt;
&lt;br /&gt;
	; 2 - Declaration of locals.&lt;br /&gt;
	Local $tMS = DllStructCreate($tagMYSTRUCT)&lt;br /&gt;
&lt;br /&gt;
	; 3 - Function code&lt;br /&gt;
	DllStructSetData($tMS, &amp;quot;hFoo&amp;quot;, $hAHandle)&lt;br /&gt;
	DllStructSetData($tMS, &amp;quot;iBar&amp;quot;, $iAnInt * $nSomeNumber)&lt;br /&gt;
&lt;br /&gt;
	Return $tMS&lt;br /&gt;
EndFunc   ;==&amp;gt;_MyUDF_Function&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=AutoIt_Introduction&amp;diff=14096</id>
		<title>AutoIt Introduction</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=AutoIt_Introduction&amp;diff=14096"/>
		<updated>2019-10-16T00:26:51Z</updated>

		<summary type="html">&lt;p&gt;Mlazovjp: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;[[Image:logo2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
©1999-2015 Jonathan Bennett &amp;amp; [[AutoIt_Team | AutoIt Team]]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.autoitscript.com/autoit3/index.php AutoIt v3 Homepage]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. It uses a combination of simulated keystrokes, mouse movement and window/control manipulation in order to automate tasks in a way not possible or reliable with other languages (e.g. VBScript and SendKeys). AutoIt is also very small, self-contained and will run on all versions of Windows out-of-the-box with no annoying &amp;quot;runtimes&amp;quot; required! &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; AutoIt was initially designed for PC &amp;quot;roll out&amp;quot; situations to reliably automate and configure thousands of PCs. Over time it has become a powerful language that supports complex expressions, user functions, loops and everything else that veteran scripters would expect.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
&lt;br /&gt;
* Easy to learn BASIC-like syntax&lt;br /&gt;
* Simulate keystrokes and mouse movements&lt;br /&gt;
* Manipulate windows and processes&lt;br /&gt;
* Interact with all standard windows controls&lt;br /&gt;
* Scripts can be compiled into standalone executables&lt;br /&gt;
* Create Graphical User Interfaces (GUIs)&lt;br /&gt;
* COM support&lt;br /&gt;
* Regular expressions&lt;br /&gt;
* Directly call external DLL and Windows API functions&lt;br /&gt;
* Scriptable RunAs functions&lt;br /&gt;
* Detailed helpfile and large community-based support forums&lt;br /&gt;
* Compatible with Windows XP / Server 2003 / Vista / Server 2008 / Windows 7 / Windows 8 / Windows 10&lt;br /&gt;
* Unicode and x64 support&lt;br /&gt;
* Digitally signed for peace of mind&lt;br /&gt;
* Works with the User Account Control (UAC) found in Windows beginning with Vista&lt;br /&gt;
&lt;br /&gt;
AutoIt has been designed to be as small as possible and stand-alone with no external .dll files or registry entries required making it safe to use on Servers. Scripts can be compiled into stand-alone executables with &#039;&#039;&#039;Aut2Exe&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Also supplied is a combined COM and DLL version of AutoIt called AutoItX that allows you to add the unique features of AutoIt to your own favourite scripting or programming languages!&lt;br /&gt;
&lt;br /&gt;
Best of all, AutoIt continues to be &#039;&#039;&#039;FREE&#039;&#039;&#039; - but if you want to support the time, money and effort spent on the project and web hosting then you may donate at the AutoIt [http://www.autoitscript.com/autoit3/ homepage].&lt;br /&gt;
&lt;br /&gt;
=Features in Detail=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Basic-like Syntax and Rich Function Set&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
AutoIt has a BASIC-like syntax which means that most people who have ever written a script or used a high-level language should be able to pick it up easily.&lt;br /&gt;
&lt;br /&gt;
Although it started life as a simple automation tool, AutoIt now has functions and features that allow it to be used as a general purpose scripting language. Language features include:&lt;br /&gt;
&lt;br /&gt;
* The usual high-level elements for functions, loops and expression parsing&lt;br /&gt;
* A staggering amount of string handling functions &#039;&#039;&#039;and&#039;&#039;&#039; a Perl compatible regular expression engine (using the [http://www.pcre.org/ PCRE] library).&lt;br /&gt;
* COM support&lt;br /&gt;
* Call Win32 and third-party DLL APIs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Built-in Editor with Syntax Highlighting&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
AutoIt comes with a customised &amp;quot;lite&amp;quot; version of SciTE that makes editing scripts easy. Users can also [http://www.autoitscript.com/autoit3/scite/ download a complete version of SciTE] that includes additional tools to make things even easier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Standalone and Small&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
AutoIt is a very small and standalone application with no reliance on massive runtimes like .NET or VB. All you need to run AutoIt scripts are the main AutoIt executable (AutoIt3.exe) and the script. Scripts can also be encoded into standalone executables with the built-in script compiler &#039;&#039;&#039;Aut2Exe&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;International and 64-bit Support&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
AutoIt is fully Unicode aware and also includes x64 versions of all the main components! How many other free scripting languages can you say that about?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key and Mouse Simulation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Much time has been spent optimizing the keystroke and mouse simulation functions to be as accurate as possible on all versions of Windows. All the mouse and keyboard routines are highly configurable both in terms of simulation &amp;quot;speed&amp;quot; and functionality.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Window Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can expect to move, hide, show, resize, activate, close and pretty much do what you want with windows. Windows can be referenced by title, text on the window, size, position, class and even internal Win32 API handles.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Controls&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Directly get information on and interact with edit boxes, check boxes, list boxes, combos, buttons, status bars without the risk of keystrokes getting lost. Even work with controls in windows that are not active!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Graphical User Interfaces (GUIs)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
AutoIt v3 will also allow you to create some complex GUIs - just like those below!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:gui_eg1.png|284px|GUI Example 1]] [[Image:gui_eg2.png|274px|GUI Example 2]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And much, much more...&lt;/div&gt;</summary>
		<author><name>Mlazovjp</name></author>
	</entry>
</feed>