content/blog/2008/02/microsoft-entourage-applescript-frustration.markdown @ 99daf70e4e41

Transfer clojure-postmark
author Steve Losh <steve@stevelosh.com>
date Fri, 13 Jan 2017 11:48:00 +0000
parents 8685d199303f
children f5556130bda1
+++
title = "Entourage + Applescript = Frustration"
snip = "This is ridiculous."
date = 2008-02-21T15:25:45Z
draft = false

+++

I've been working on a project lately to automate the setup of some rules and
schedules in Microsoft Entourage. This isn't the easiest thing in the world
because Entourage doesn't really support AppleScript for creating rules or
schedules (though it does an admirable job in a lot of other areas).

We've resorted to GUI scripting to get the job done. This basically means
we're telling our script to click button X, wait a bit, put "abc" in text
field Y, click button Z, etc. This is painful, fragile and slow but it does
what we need in all but one case.

That case is selecting a folder. The folder list dialog that pops up doesn't
seem to use any of Apple's UI components which makes GUI scripting it nearly
impossible. Only "nearly" though, because there's a way to get around it: the
keyboard. AppleScript can type into a window by sending a series of key codes.
You can select something from the folder list by typing its name, which means
that as long as you know the name (we do) you can select it. Almost.

There's one more snag: selection by typing will only ever select the first
item in the list. This means that if you want to select "Inbox" and both the
"On My Computer" list and the "youremail@server.com" list are open, you can
only get the first Inbox. Oh, and good luck predicting which one will show up
first. It seemed to be different each time I opened the window.

Once again the keyboard comes to our rescue. A simple (and excruciatingly
ugly) fix is to make sure that the only account listing that's open is the one
we want. How can we do that? Send an up arrow key code 50 times to move to the
beginning of the list, then left and down codes 50 times. This collapses the
entire tree. Then just type the name of the account to select it, send the
right arrow code to expand the tree, and type the folder name to select it.

It's painful, but it works. If anyone has a better solution please let me know
so I can rip this monstrosity out of my code and try to forget about it.