El bicho:
Cuando la función de AppleScript diálogo de progreso es sucedido por un diálogo, el diálogo de progreso aún persiste -aunque todos los pasos de progreso se hayan completado, y la barra de progreso esté llena. Permanecerá hasta que el script haya sido cancelado, hasta que el script haya finalizado, o hasta que no existan más diálogos en el script.
Este error no puede ser presenciado mientras se ejecuta el código desde dentro de script Editor.app, porque, en script Editor, no aparecerá un diálogo de progreso. En su lugar, se integra un medidor de progreso en forma de tarta en la parte inferior de la ventana script.
Cómo reproducir el error:
Guarde el siguiente AppleScript código como un archivo .app:
(El archivo debe ser un archivo .app, ya que los archivos .scpt no pueden mostrar diálogos de progreso).
set n to 5
set progress total steps to n
set progress description to "Script Progress"
set progress additional description to "Additional description"
repeat with i from 1 to n
delay 0.1
set progress completed steps to i
end repeat
display dialog "The progress dialog should be gone at this point."
Al iniciar la aplicación, verás lo siguiente:
La pregunta:
¿Existe una solución para forzar el cierre del diálogo de progreso una vez completado, de modo que se puedan colocar diálogos adicionales después del diálogo de progreso, sin que éste siga siendo visible?
Lo que he probado:
He intentado abordar el problema interpretando el diálogo de progreso simplemente como una "ventana" de la aplicación.
Si ejecuta el siguiente código en un archivo AppleScript separado, mientras ambos diálogos de ProgressBarTest.app están en pantalla (como en la captura de pantalla anterior):
tell application "System Events"
set allWindows to name of window of processes whose visible is true
end tell
return allWindows
aprenderá que ProgressBarTest.app tiene 2 "ventanas" abiertas. Los títulos de estas ventanas son:
{"", "ProgressBarTest.app"}
La primera ventana de esta lista se refiere al display dialog
diálogo. La segunda ventana de esta lista, titulada ProgressBarTest.app
es el diálogo de progreso.
Luego intenté cerrar esta "ventana" de diálogo de progreso utilizando AppleScript (como se puede hacer para cualquier ventana de aplicación estándar). Pero, el siguiente código:
tell application "System Events" to tell process "ProgressBarTest.app"
if exists window "ProgressBarTest.app" then
close window "ProgressBarTest.app"
end if
end tell
dará un error al usuario. El texto de este diálogo de error es:
script Error
Los eventos del sistema tienen un error: la ventana "ProgressBarTest.app" del proceso "ProgressBarTest.app" no entiende el mensaje de "cierre".
Pronto me di cuenta de que, si tu pantalla tiene el mismo punto de vista que la de la captura de pantalla anterior, entonces no puedes ni siquiera cerrar manualmente el diálogo de progreso. Esto se debe a que el display dialog
tiene prioridad sobre el diálogo de progreso; el display dialog
"gris" (es decir, desactiva) todos los botones del diálogo de progreso.
Así que, para tener en cuenta esto, en el código de ProgressBarTest.app, añadí un delay 5
directamente sobre el display dialog "The progress dialog should be gone at this point."
línea. Quería ver si podía cerrar con éxito el diálogo de progreso, si el diálogo de progreso era el único diálogo activo de la aplicación.
He probado el siguiente código:
tell application "System Events" to tell process "ProgressBarTest.app"
if exists window "ProgressBarTest.app" then
click button 1 of window "ProgressBarTest.app"
end if
end tell
En el código anterior, button 1
se refiere al Stop que se encuentra en el diálogo de progreso. (También puede utilizar button -4
o button 0
para referirse a este mismo botón).
La buena noticia es que este código cerró con éxito el diálogo de progreso.
La mala noticia, sin embargo, es que cuando el diálogo de progreso Stop en lugar de cerrarse sólo el diálogo de progreso, el todo el script se cancela. Esto es obviamente indeseable.
root del problema es que el diálogo de progreso no contiene ninguna "x" roja; el botón circular más a la izquierda de la barra superior de este diálogo está siempre en gris. En otras palabras, no hay manera de cerrar el diálogo de progreso manualmente, sin terminar también prematuramente el script.
Así que este problema es más difícil de resolver de lo que pensaba.
Parece que mi resultado deseado es imposible de conseguir.
OS X El Capitan, versión 10.11.6.