This script is to open microsoft apps and then quit after 3 seconds
tell application "Finder"
set myFolder to ((startup disk as text) & "Applications:Microsoft Office 2011") as alias
set myFiles to (every item of myFolder) as alias list
open myFiles
end tell
delay 3
tell application "System Events" to set the visible of every process to true
set white_list to {"Finder"}
try
tell application "Finder"
set process_list to the name of every process whose visible is true
end tell
repeat with i from 1 to (number of items in process_list)
set this_process to item i of the process_list
if this_process is not in white_list then
tell application this_process
quit
end tell
end if
end repeat
on error
tell the current application to display dialog "An error has occurred!" & return & "This script will now quit" buttons {"Quit"} default button 1 with icon 0
end try
end tell
but when I run the script, it stops after this. (EDIT) it seems to close every app besides the microsoft applications
tell application "Finder"
set myFolder to ((startup disk as text) & "Applications:Microsoft Office 2011") as alias
set myFiles to (every item of myFolder) as alias list
open myFiles
Both opening and closing the applications scripts work great separately but I don't seem to know how to join them. If anyone knows why this is happening, that would be great. Thanks
The problem you're having is that telling Finder to open an app is asyncrynous in the script. Meaning, it won't finish until the app is loaded before moving on. You're never gonna get it right with the delay command, either. I'd suggest using 'tell app xxx to activate' which does wait before proceeding. And, it makes your script way cleaner.
property myApps : {"Microsoft Word", "Microsoft Excel"}
repeat with thisApp in myApps
try
tell application thisApp to activate
end try
end repeat
-- do whatever you need after all are open
repeat with thisApp in myApps
try
tell application thisApp to quit
end try
end repeat
If you are wanting to quit every visible app except Finder, you can also add
tell application "Finder" to set myApps to name of (every process whose ((visible is true) and (name is not "Finder")))