"Connection is invalid" means that the script cannot communicate with the application. Perhaps it has been quit during execution… perhaps there is a duplication in your list? My best guess is that there is more than one process spawned by an application.
Anyway, I think your methodology could be improved. One of your problems is that you're checking the process for each item in your list. You should compile a list of processes, and check that. This avoids the problem of duplicate processes for the same application. It also deals with the issue of the process list changing during script execution.
set appList to {"Caffeine", ...}
tell application "System Events"
set procList to (name of every process)
end tell
repeat with appName in appList
if (procList contains appName) is true then
tell application appName to quit
else
tell application appName to activate
end if
end repeat
If you still get errors, you might have to enclose the tell application statements in try
blocks.
One more thing: the approach you're taking doesn't work well if only some of the applications are open, and some are not. You're checking each individually and quitting if it's open, launching if it's not. So your list of applications will still be split between open/shut down. It sounds like you want to open a "set" of applications and close a "set" of applications using the same script.
Therefore, you may want to consider splitting this into two scripts, "open set" and "quit set", and/or checking whether your "main" application is open and cascading the open/close of your application list depending on that one application's state.
Try this
tell application "Firefox"
activate
tell application "System Events"
keystroke tab
keystroke (key code 125)
keystroke (key code 125)
keystroke (key code 125)
end tell
end tell
You might not need to activate Firefox if it's the current active app. Them you just need :
tell application "System Events"
keystroke tab
keystroke (key code 125)
keystroke (key code 125)
keystroke (key code 125)
end tell
Best Answer
For a double-click every 5 seconds, until you quit the script, try just