I frequently encounter the need to determine whether a process is ready for the next action from KM. I've tried a number of approaches including waiting until a menu item is available and waiting for a found image that doesn't appear until the application has completed whatever it was doing.
But I think that I've found a more general approach. If a process is busy, it won't answer a query from System Events. So the trick is to wait until a System Events
tell process <process name> to get window 1 command successfully completes.
I've tried this with several applications and it has worked. If others try it I would be interested in hearing about any cases where it fails.
The subroutine executes the following AppleScript:
use AppleScript version "2.4" -- Yosemite (10.10) or later use scripting additions tell application "Keyboard Maestro Engine" set theProcess to getvariable "localProcess Name" instance (system attribute "KMINSTANCE") set theDelay to getvariable "localRetry Time" instance (system attribute "KMINSTANCE") end tell if theDelay is "" then set theDelay to 0.5 else set theDelay to theDelay as number end if tell application "System Events" tell process theProcess set gotIt to false repeat while (not gotIt) set gotIt to true try delay theDelay get window 1 on error set gotIt to false end try end repeat end tell end tell
WaitForProcess.kmmacros (5.0 KB)