AutoHotkey Webinar- Working with Multiple Scripts & Sharing data / variables between them

In our first hour of today’s  AutoHotkey webinar we talked about working with multiple scripts in AutoHotkey.  How you can break out functions into separate files and leverage the library.

In the Second Hour we did Q&A and discussed other things we typically automate.

The two scripts we highlighted were: Dictionary by Fanatic Guru and iThesauras based of Dictionary by rommmecek.

Working with Multiple Files in AHK

  • Breaking out scripts into separate files / functions (Here is a page several videos on functions)
  • Using #include
  • Lib folder
  • Sharing data between scripts via:
  • Passing via command line parameters
  • OnMessage
  • COM object via Windows Temp Environment variables
  • COM object via custom object
  • Consolidating scripts from multiple files into one

Libraries and #Includes

Libraries

  • A script may call a function in an external file without having to use #Include. For this to work, a file of the same name as the function must exist in one of the following library directories:
  • Local library: %A_ScriptDir%\Lib\
  • User library: %A_MyDocuments%\AutoHotkey\Lib\
  • Standard library: path-to-the-currently-running-AutoHotkey.exe\Lib\

Order of search

  1. Original file
  2. Local Library
  3. User Library
  4. Standard Library
  • If a function is not found, but has an underscore in the name, it will search for a library with everything up to the underscore. (E.g. If your function is named “IE_Load” it will search for a file named IE.ahk and load it)

  Benefits of using Library: 1) Code maintenance, 2) Fewer files to keep track of, etc.  3) Easier to read code

  Negatives of using Library: Sharing code can be a bit more complex

Sharing data between scripts: Command line Parameters

AutoHotkey.exe [Switches] [Script Filename] [Script Parameters]

CompiledScript.exe [Switches] [Script Parameters]

Script Parameters:

  • The string(s) you want to pass into the script, with each separated from the next by a space.
  • Any parameter that contains spaces should be enclosed in quotation marks.
  • The script sees incoming parameters as the variables %1%, %2%, and so on.
  • In addition, %0% contains the number of parameters passed (0 if none). However, these variables cannot be referenced directly in an expression because they would be seen as numbers rather than variables.
  • In the receiver, use Param2 = %2% ;Note NO colon

Pros:  Simple, reliable

Cons: Only works when starting up, One-direction, Only passes strings/variables

Sharing data between scripts: OnMessage

Pass String between scripts with OnMessage

Pros: Simple to Use

Cons: Code is somewhat complex, A bit resource intensive, Pass single variable

Sharing data between scripts: Temp Environment Variable

Create a Temporary Environment Variable and stores it, until reboot, in Registery under: HKCU\VolatileEnvironment

Pros: Easy to use, Variable is Accessible after “sender” exits, Fast, Can use objects / dot-notation

Cons: Pass variables/strings, Character limitation

Sharing data between scripts: Custom COM Object

Registers a unique CLSID (Computer Licence Security ID) in registry  (A CLSID is a globally unique identifier that identifies a COM class object. If your server or container allows linking to its embedded objects, you need to register a CLSID for each supported class of objects.)

Pros:Can pass objects, Functions, Variables,Strings, Bi-directional, Super Fast

Cons: Code is more complex, Can’t use FOR loops to iterate over Objects, Can slow some when passing large data

Consolidating Multiple Scripts into One

  • AutoExec section – (Top of script until first: Return, Exit, hotkey/hotstring label)
  • Hotkeys – Conflicting Hotkeys prevents script from running (Make them context sensitive?)
  • Hotstrings – First Hotstring takes presedent
  • Re-using: Variables , Functions, Labels, Classes cause errors
  • Duplicate code – Often bring in things multiple times
  • Reasons why prefer one over the other
  • Multiple scripts-
    • Sharing scripts is easier
    • Troubleshooting can be easier
  • One Script-
    • One file to edit
    • One script in system tray (Can use #Notrayicon in multiple scritps to help negate this)
    • Ease sharing of code

AutoHotkey Webinar- Spreading AHK Luv & Making $ with AHK

In our first hour of today’s webinar we talked through the below points on how to improve adoption rate of AutoHotkey for users as well as making money with AutoHotkey.

The second hour dove a bit deeper into both topics and discussed other subjects related to these.

Script Highlight:

FindText – Capture Screen Image & Find it

Don’t let the name “FindText” fool you (it isn’t about ‘text’)

 Things to keep in mind:

  • Make sure you keep the same: Screen resolution, magnification, font, zoom
  • Test Grayscale vs Color
  • You can adjust the size of the capture area (but smaller is generally better)
  • Tutorial 1 demonstrating the function and an Example using it
  • Function to help take action on what you find

PowerPoint deck / Resources:

Which best describes your Organization’s current RPA (Robotics Process Automation) adoption level?

Here is the full Slide deck, podcast, and book entitled: Service Automation: Robots and the Future of Work 2016 by Leslie P. Willcocks (Author), Mary Lacity (Author)

Misconceptions of RPA / Desktop Automation

Desktop Automation

  • …is only used to reduce workload & lay-off employees
  • …is mainly driven by cost savings
  • completely replaces the need for a person

Why Don’t More People Automate / Use AutoHotkey?

  • People do notlike change. (correlation with age?)
  • People don’t realize what canbe automated (“think small” – “magic redo” button?)
  • Managers / Decision makers think it is “too expensive
  • No “GUI” to use for creating scripts.  Non-techies get “overwhelmed” with coding.
  • Everyone is “too busy” to learn how to save time. Even though they’re interested in saving time they don’t find time to learn how to automate. (Story of a woodcutteris a great analogy; remember to take time to ‘sharpen the saw’)
  • Some people are too proud to let-on that they really don’t understand what you’re doing. They might try it on their own but get frustrated and give up after 15 minutes.  (Perhaps reviewing 1-1 is better than in groups?)
  • Managers oftendo not encourage their employees to automate. (I’ve had several bosses that told me NOTto automate.)
  • Most people think short-termand not long-term. This can present itself in the following dimensions
  • The job is “too small” to be automated (almost never true)
  • The job is a “1-time” need (rarely, if ever, the case; the “job” might be but the “approach” is bound to come up again)
  • I’m the only one that would use this (rarely the case)
  • It will take too long to write code to automate (I think this is one of the best things about AutoHotkey.  FAST!)
  • It must be “fully automated” (No need to automate the entire process)
  • Not considering “side-effects” of automation (tracking log to examine events, employee / customer satisfaction etc.)

Best Approach to Get Adopters

1.Don’t overwhelm them with all that AutoHotkey can do!

  • Only get them to learn 1 thing!
  • Give them time to learn/adopt that and then come back with additional tips

2.Curtail what you demonstrate to the prospect’s level

  • Luddites- Stick to HotKeys and HotStrings
  • Somewhat Nerdy- Demonstrate some scripts, Input box, Sending keystrokes / Clicks, File manipulation
  • Nerds- Whatever their need! (Dll calls, Image search, API calls, Web Scraping, Objects, RegEx, GUIs, etc.)

3.Get a senior-level advocate (Director or above)

  • Senior people see the cost-savings
  • Your supervisor will think your coding is counting against “their time”
  • Colleagues might be worried you’re “automating” them out of a job
  • IT also might try and road-block you. Get the business to “demand” it

4.Create custom script for their needs

  • Don’t build in all bells-whistles

Making $ Money with AutoHotkey

General Models

  • Selling generic programs / scripts to large audience
  • Selling custom scripts to individuals / company
  • Getting paid to code (they own the intellectual property) & you get paid by hour

Getting Paid

Licensing

Shareware / Freeware / Donations

Rich” Target markets

  • Lots of people doing same job function
  • “Thankless” / mundane jobs with clear logic/ “rules-based” descisions and structured data
  • Lots of, repetitive, transactions
  • Non-programming “business” people
  • People with Money!!!
  • Sales people!
  • Realestate

Incentives / Benefits to Highlight to Potential Clients

  • Employee / man-hour savings resulting in high ROI (Return on Investment)
  • Better quality results than from humans / Higher compliance
  • Faster deployment getting things done (clients / customers are happier)
  • Increased scalability
  • Happier, more productive, employees
  • Have more “Meta-Data” to do analysis on
  • The more you do, the easier it gets
  • The more you automate, the more time you have to automate

AutoHotkey Webinar- Parsing plain text with AutoHotkey

Video Hour 1: High-level overview:AutoHotkey Webinar

In the first hour of our AutoHotkey webinar we demonstrated Quick Access Popup from our guest speaker Jean Lalonde.  It is an amazingly customizable tool that allows you to have what you want at your fingertips!

Here is an abbreviated list of some of the great features:

  1. Create shortcuts to folders, programs, files, links, Snippets, special folders, etc.
  2. Easily create Hotkeys for above shortcuts
  3. Works with most Open/Save dialog boxes
  4. Integrated with most file managers (Windows Explorer, Directory Opus, Total Commander, etc.)
  5. The tool itself is highly customizable
  6. Have “shared” sections as well as individual ones
  7. Organize your menu into folders & sub-folders
  8. Customize Menu/GUI shortcut with an icon (that makes sense to you)
  9. Available in 10 languages

You can watch a short overview video here or get a deeper dive here.  Jean was kind enough to walk me through his tool in this video.

We then talked about what a “text file” is and frequent sources of them (Export from programs, sever logs, emails, etc).  We also briefly discussed what is File / Character Encoding & why are there frequent problems with it (this is a very deep topic which we could have spent days discussing!)

Also discussed  what a “flat file” is and how they are different than:

  • Multi-row files
  • Relational files
  • XML and JSON files

We then shared some of the frequently used built-in commands and functions for parsing text in AutoHotkey.

Then we got into various custom-built in libraries and functions

Then our guest speaker, Jean, took over walking us through some examples of common problems with AutoHotkey LoopParse command

The library is pretty cool and here are some of the main functions available:

  • CSV2Collection() – Transfer the content of a CSV file to a collection of objects.
  • Collection2CSV() – Transfer the selected fields from a collection of objects to a CSV file.
  • Collection2Fixed() – Transfer the selected fields from a collection of objects to a fixed-width file.
  • Collection2HTML() – Builds an HTML file based on a template where variables are replaced with content.
  • Collection2XML() – Builds an XML file from the content of the collection.
  • Collection2ListView() – Transfer the selected fields from a collection of objects to ListView.
  • ListView2Collection() – Transfer the selected lines of the selected columns of a ListView to a collection of objects.

ObjCSV Examples:  Here are the files Jean worked through.

  • SIMPLE CSV FILE – COMA DELIMITED (TheBeatles-coma.txt)
  • SIMPLE CSV FILE – TAB DELIMITED – ISSUE #1 (TheBeatles-tab.txt)
  • MULTI-LINE CSV FILE – COMA DELIMITED – ISSUE #2 (TheBeatles-Lyrics.txt)

Jean then gave us a review of how to use his ObjCSV library

  • Example using ObjCSV_CSV2Collection
  • SIMPLE CSV FILE – COMA DELIMITED (TheBeatles-coma.txt)
  • SIMPLE CSV FILE – TAB DELIMITED – ISSUE #1 SOLVED (TheBeatles-tab.txt)
  • MULTI-LINE CSV FILE – COMA DELIMITED – ISSUE #2 SOLVED (TheBeatles-Lyrics.txt)
  • PROGRESS BAR WITH LARGE CSV FILE – SEMI-COLON DELIMITED (LargeFile-semicolon.txt)
  • CUSTOM HEADER – SIMPLE CSV FILE – COMA DELIMITED (TheBeatles-coma.txt)
  • GUI Example using Collection2ListView
  • SAVING WITH DIFFERENT DELIMITER using ObjCSV_Collection2CSV
  • EXPORT HTML Example using ObjCSV_Collection2HTML

Wrapping up the first section we then saw a peak at CSVBuddy

CSVBuddy Examples

  • Reading large file with auto-detection
  • Editing field names, re-order or select fields
  • Saving options
  • Saving file with multi-line content converted to single-line (Excel-ready)
  • Reverting the single-line file to multi-line (for example, after manipulation in Excel)

Video Hour 2: Q&A:

In the second hour we discussed various issues working with text data as well as took a deeper look into Quick Access Popup.

Near the end of the time Capn Odin shared a Trie script he’s been working on.  You can check out the script on the forum

Webinar- SciTE4AutoHotkey is an amazing editor!

SciTE4AutoHotKey

In this AutoHotkey Webinar we cover using/customizing  SciTE4AutoHotkey by FincsSciTE webinar

Video Hour 1High-level overview:

SciTE4AutoHotkey is a lightweight and easy to use SciTE-basedAutoHotkey script editor. It provides:

Demonstration of cool SciTE4AutoHotkey features

  1. Multi-line typing
  2. Dynamic Intellisense
  3. Move text up/down
  4. Comment / Un-comment
  5. Change applied Intellisense language
  6. Copy / Paste as RTF
  7. Custom Context Menu
  8. Search / Replace – with RegEx
  9. List of Extensions to “open”
  10. Highlight multiple instances of each word
  11. Change color of highlighting for found word
  12. Custom Status bar
  13. Configure hotkeys (w/o AutoHotkey)
  14. Custom your Status bar
  15. Setting default magnification level
  16. Import additional languages (here are an additional ~70 languages)
  17. Leverage the Output area as a GUI
  18. Customizing your context menu
  19. Running multiple instances of SciTE
  20. Debug your scripts
  21. Run selected text

Scripts / External Resources

  1. Main thread on SciTE4AutoHotkey
  2. 16 videos @ the-Automator on using / customizing SciTE
  3. 42 of built-in Hotkeys
  4. My SciTE User.properties file (backup yours before playing with it!)
  5. Adding Intellisense for an additional ~70 languages
  6. Scintilla / SciTE Documentation, Interface, Menu /Key commands
  7. UserGroup plus StackOverflow
  8. Second SciTE window by boiler (launch script, then do new window)
  9. Tweaking Intellisense to use your file / library from XeroByte
  10. Have Intellisense examine current file from lexikos

Video Hour 2Discussion and Q&A

Script Highlight: Button Clock

Why waste space for “Start” button.   Use Button_Clock_WINXP from Goyyah