AutoHotkey Webinar- Intro to AutoHotkey

In this webinar we cover an Intro to AutoHotkey.

Video Hour 1: High-level overview: Hour 1
Video Hour 2: Q&A: Hour 2

Script Highlight: Minimize to tray–  This is an “old” AutoHotkey script but is super-cool!   When running you simply press the Windows Key & H and the active program will “disappear”.  It works on multiple windows.  Then, when you want them back, press Windows & U and the windows will be visible again.

Intro to AutoHotkey

  • AutoHotkey is free, open-source, Windows scripting language
  • Created in 2003 from Chris Mallet it was an off-shoot of AutoIt
  • AHK is user-friendly for non-programmers but is also used by programmers as it “hooks” into Windows & windows programs very well
  • The core language is very descriptive and typically isn’t too hard to grasp
  • Scripts are easily “compiled” into an executable which can be easily shared
  • You do not need to install AutoHotkey to run it. (It can be run from a thumb-drive)

What can AutoHotkey do?

You can automate virtually anything on a Windows computer!  Here are some uses:

  • HotStrings: think text expansion on your phone or spell-check in MS Word
  • HotKeys: Launch programs with a click of a button
  • Files & Folders: Manipulate, read, move, delete etc.
  • Automate programs : Outlook, Word, Excel, SPSS, VLC, Adobe, etc.
  • Connect to Windows API: Programmatically affect Windows & other programs
  • Web Scrape: Reliably download data from webpages &/or manipulate /complete forms
  • Web Service APIs: Many vendors allow you to query their services
  • Create GUIs: Simplify interacting with scripts by creating a GUI to manipulate
  • Regular Expressions: use pattern matching on text files to extract or re-arrange the text
  • Audio & Image Manipulation: Screen clipping, OCR, extract audio, Video recording, etc.
  • So much more!!!

AutoHotkey Resources

Installation of AutoHotkey

Go here and download the current version of AutoHotkey

During installation, we recommend installing the Unicode 32-bit version of AutoHotkey

Installing a Default AutoHotkey Editor

AutoHotkey code is “plain text” and pretty easy to read

Having said that, using an editor / IDE, instead of notepad, is very helpful!

Below are links to the three most popular AHK editors.  Are all equally good as are many others).  For our demonstration we are going to use SciTE (pronounced ‘sight’)

  • SciTE4AutoHotkey  is a great editor for AutoHotkey.  Here are a bunch of videos demonstrating how to Customize SciTE
  • AutoHotkey Studio  Great editor specific to AutoHotkey.  Check out the demo in this webinar
  • Notepad ++  Another great editor which is customized for working with AutoHotkey

Before Your First AutoHotkey Script

Before we start coding, here are some basics which will help you

  1. #SingleInstance, Force: Put in all scripts. This Forces 1 instance of the script
  2. The Green icon with white H   in system tray shows you the script is running
  3. Every time you make changes to your script, you need to Reload / Launch it for the changes to take affect
  4. Frequent Modifier keys (for HotKeys) are: ^=Control #=Windows +=Shift  !=Alt
  5. Frequent Special Characters (for HotStrings) are:#,!,+,;  Wrap them with {}
    1. For a New Line, use `n, for a tab use `t


Your First AutoHotkey Script


;  ^=Control #=Windows +=Shift  !=Alt
^b::Run C:\Program Files\Mozilla Firefox\firefox.exe ;Launches FireFox
^n::run notepad.exe ;Launches Notepad
~^n::run notepad.exe ;launches Notepad w/o absorbing the HotKey


::jg.::Joe Glines
:o:jta.::Hello ,How are you? {left 14}

Copy & Paste to Excel

;********************Copy selected text, activiate Excel & Paste****************
;***********Copy / Paste to other program
backup:=ClipboardAll ;create a backup of the clipboard
Clipboard:="" ;clear the clipboard
Send, ^c ;Send "Control C" to copy selected text
ClipWait,1 ;waiting for clipboard to have data
;~  MsgBox % Clipboard ;Show the clipboard has data

winactivate, ahk_exe EXCEL.EXE ;Activate Excel
WinWaitActive, ahk_exe EXCEL.EXE ;Wait for Excel to be activated
Send, ^v ;Send "Control V" to paste the data into Excel
sleep, 100 ;add 1-10th of a second to wait
Send, {down} ;send  the down-arrow key to move cursor to cell below
sleep, 100 ;wait 1-10th of a second
winactivate, ahk_exe SciTE.exe ;Activate SciTE 
Clipboard:=backup ;restore clipboard
return ;end this section

Troubleshooting & Debugging

  • Watch our AutoHotkey webinar on Troubleshooting & Debugging (or join a future webinar and ask questions in the second hour)
  • Work through our HotStrings Udemy course
  • Is script running / Green icon with white H in system tray
  • If Green H Icon, Restart script
  • Double-click icon & look at: last lines run, Variables & their contents, Hotkeys & their methods, Key history
  • Close all other scripts & programs & retry
  • If still not working, start using msgbox to “walk through” the script
  • Try using ListVars & ListLines
  • Read documentation on specific command/function you’re having issue on. Search forum/StackOverflow for examples
  • Try running your script as Admin
  • Temporarily turn-off UAC (User Account Control)
  • Is your issue after the Auto-Execute Section?
  • If Context-sensitive, remove context sensitivity & run general
  • Reboot the computer (hey, it’s Windows…)
  • Search the AutoHotkey Forum, Stack Overflow for similar issues
  • Is the problem consistent & repeatable?
  • Does it happen on other computers?
  • What, specifically, isn’t working? Break down the part that isn’t working into it’s-own script. Provide specific example to AHK Forum, StackOverflow, or friend after spending at least 30 minutes on it yourself. You can also check Discord for live feedback/support.
  • For SciTE debugging, you can check out videos on this post


Great AutoHotkey script to URL Encode/Decode and parse URL parameters

parse url parameters

Working in email marketing and Website design I frequently need to URL Encode / Decode and parse URL parameters.  This short AutoHotkey script makes doing so a breeze!  I watch my colleagues struggle through trying to read encoded URLs or try and find every parameters in a given URL.  With this script you can see just how easy it is to decode a URL and then parse it on the “?” then by every “&” putting them on new lines.

A second usage is to help examine how websites use URL Parameters to serve-up a webpage.  This can be very helpful when doing Web Scraping as you can automate generating the page from a given website.

Video demonstrating how to Parse URL Parameters

AutoHotkey script to Parse URL Parameters

#SingleInstance, Force
;***********Encode URL******************* 
!e:: ; alt+e encodes highlighted text
gosub Store_Clipboard_Copy_Selected_Text ;backup original clipboard
Clipboard:=UriEncode(clipboard)  ;convert to URL encoded
Gosub Paste_and_Restore_Stored_Clipboard ;restore clipboard

;***********Decode URL******************* 
!d:: ;Alt+d will Decode highlighted text
gosub Store_Clipboard_Copy_Selected_Text
Clipboard:=URiDecode(clipboard) ;Decode URL
Gosub Paste_and_Restore_Stored_Clipboard ;restore clipboard

!w:: ;Decode URL and Wrap on parameters
gosub Store_Clipboard_Copy_Selected_Text
StringReplace,clipboard,clipboard,?,`r`n`t?,All ;Line break and tab indent <strong>parse URL parameters</strong>.
StringReplace,clipboard,clipboard,&,`r`n`t`t&,All ;Line break and double tab indent
Gosub Paste_and_Restore_Stored_Clipboard

;*******Store Clipboard- save for restoring, and copy selected text to clipboard****************
Store:=ClipboardAll  ;Store full version of Clipboard
  clipboard = ; Empty the clipboard
  SendInput, ^c ;changd from Send  11/23
  ClipWait, 1
    If ErrorLevel ;Added errorLevel checking
        MsgBox, No text was sent to clipboard

;**********************restore clipboard*********************************
Paste_and_Restore_Stored_Clipboard:  ;put back original content
SendEvent , ^v

uriDecode(str) {
	If RegExMatch(str, "i)(?<=%)[\da-f]{1,2}", hex)
	   StringReplace, str, str, `%%hex%, % Chr("0x" . hex), All
	   Else Break
	Return, str

UriEncode(Uri, RE="[0-9A-Za-z]"){
    While Code:=NumGet(Var,A_Index-1,"UChar")

If this interested you, you might also want to investigate using web scraping with AHK.