Note: This particular example is a real one that I used earlier today to save a small amount of time, but these are techniques that I’ve used many times over the years to literally save myself days worth of time.

The Scenario

I was trying to go through and clean out a bunch of incorrect broadcast messages in our email newsletter account, when I realized that their interface required me to manually click the Delete button and then confirm it on every single message—we’re talking about 300 incorrect messages that needed to be deleted. To make matters worse, the interface is extremely slow, which means I would have spent a good 30-40 minutes just clicking and making my carpal tunnel even worse.

Instead of doing that, I created a new AutoHotkey script and quickly wrote up a script to do the work for me.

The first step was to identify exactly which clicks and keys I needed to automate—obviously the first step is to click on the X button, which brings up this Ajax confirmation dialog:

Luckily the Delete button is automatically highlighted, so you can simply hit the Space key to confirm. Once the record has been deleted, everything slides up as if the row was never there. Knowing this, we’ll move on and create a script that automates clicking the X button, waiting 3 seconds for the confirmation dialog, presses the Space bar, and then waits another 3 seconds for the row to disappear.

Creating the Script

The first thing we’ll want to do is create a loop that will repeat the same actions a number of times—in this case, we’re estimating that we’ll need to repeat this 300 times, so we’ll use the Loop syntax like this:

Now we’ll need to automate the click action, which is easy in AutoHotkey—you just type click. You can use a more advanced click syntax if you want, choosing exactly where you want it to click on the screen, or choosing the button click. For our purposes, we’ll just be using the default, which leaves us with this:

  }

Now our script will click 300 times in a row, but unfortunately we’ve got that confirmation dialog to deal with, so now we’ll use the Send function to send the Space bar keystroke to the active window.

If you look at the documentation you’ll see all of the syntax for special keys—regular keystrokes can be entered normally—for instance, if you wanted to type test and then end it with a Space, you’d use this:

So now we’ve got a script that clicks the button and then hits the Space bar, which would be alright except the interface is slow, so we need to insert a small pause between each execution of the click and send functions. To accomplish this, we’ll use the Sleep function, which takes only one argument—the delay in milliseconds.

Now we’ve got a script that will successfully delete the items, waiting 3 seconds before it starts so that you can move the mouse cursor over the first X, clicking the button, waiting 3 seconds, hitting the Space bar, and then waiting 3 seconds before it goes through the next set. You could use this simple script right now if you wanted to—but what if you want to stop the script?

What we’ll do is use the GetKeyState function to check whether you’ve hit a certain key—for testing, we’ll use the F8 key and add the following into the middle of the loop. This will detect whether the F8 key has been pressed, and then use the break to exit the loop.

The Final Script

Here’s the final script all put together, which probably won’t help you too much since it’s specific to my scenario—but you can use it to create your own scripts by simply modifying the clicks and keystroke sending.

To illustrate how this works in practice, here’s a quick video that shows it in action:

In this particular scenario, it took me about 3 minutes to throw together a working script—time saved: 27 minutes. Just enough time for me to record the video and write this article!