Haga que el script se ejecute sin interrumpir la experiencia GUI

0

Tengo un AppleScript que abre automáticamente SelfControl.app para ayudar a evitar distracciones cuando quiero trabajar. El script es muy similar a automatizar un filtro de contenido de Internet , y iCal lo inicia automáticamente en un conjunto. tiempo.

El problema es que cuando se ejecuta el script, la ventana se abre en la pantalla, y si estoy escribiendo algo, mi escritura interfiere con el cuadro de diálogo para ingresar la contraseña, y el script falla.

¿Cómo puedo hacer que el script se ejecute independientemente de la actividad del usuario? En otras palabras, ¿cómo puedo ejecutar el script sin mostrar al usuario la evidencia de la GUI de que el script se está ejecutando?

AppleScript

A continuación hay un fragmento de código. myTime y myPass se definen anteriormente en la secuencia de comandos:

set myTime to …
set myPass to …

tell application "SelfControl" to activate

tell application "System Events"
    tell process "SelfControl"
        tell slider of window "SelfControl" to set value to myTime
        click button "Start" of window "SelfControl"
    end tell

    tell window 1 of process "SecurityAgent"
        with timeout of 15 seconds
            repeat
                set tryAgain to false
                try
                    set value of text field 2 of scroll area 1 of group 1 to myPass
                on error
                    delay 1
                    set tryAgain to true
                end try
                if not tryAgain then exit repeat
            end repeat
            click button 2 of group 2
        end timeout
    end tell
end tell
    
pregunta reynoldsnlp 24.08.2015 - 10:51

2 respuestas

1

Esto se puede lograr desde la línea de comandos usando el sistema defaults , como se demuestra en el sitio de github de SelfControl .

Para evitar la rotura de enlaces, copio el texto del sitio a continuación:

  

En algunos casos, es posible que desee iniciar un bloque de Autocontrol desde la línea de comandos. Esto puede hacer que sea mucho más fácil para los usuarios avanzados crear secuencias de comandos de sus bloques de Autocontrol. Este artículo explica cómo puede iniciar SelfControl desde la línea de comandos. Si no está familiarizado con la línea de comandos, este artículo no es para usted.

     
  • Instale SelfControl en su carpeta de aplicaciones.
  •   
  • Establezca sus preferencias de bloqueo a través del sistema defaults . Los valores clave que necesitará establecer son BlockDuration (longitud del bloque en minutos), HostBlacklist (una matriz que contiene la lista de hosts a bloquear / lista blanca) y BlockAsWhitelist (hace que sea una lista blanca en lugar de lista negra). Hay más preferencias si las quieres; puede verlos ejecutando defaults read org.eyebeam.SelfControl (o simplemente configúrelos en el panel de preferencias de la aplicación). No establezca BlockStartedDate , eso lo maneja el programa automáticamente.
  •   
  • Ejecuta sudo /Applications/SelfControl.app/Contents/MacOS/org.eyebeam.SelfControl $(id -u $(whoami)) --install para iniciar un bloque. Se ejecutarán chequeos automáticamente para ver si el bloque debe eliminarse cada minuto.
  •   
  • Espere a que caduque el bloqueo. Si desea ejecutar manualmente un chequeo para eliminar el bloqueo, si es necesario, puede hacerlo con sudo /Library/PrivilegedHelperTools/org.eyebeam.SelfControl $(id -u $(whoami)) --checkup . Si eso no elimina la copia de seguridad correctamente, puede ejecutar nuestra herramienta de eliminación de copia de seguridad con /Library/PrivilegedHelperTools/scheckup .
  •   
    
respondido por el reynoldsnlp 29.10.2015 - 14:51
0

Puedes intentar lanzar "Autocontrol" en segundo plano y luego ocultarlo (aunque, simplemente lanzar en segundo plano puede ser suficiente en tu caso). La idea es ocultar la aplicación una vez que aparece una ventana, lo que indica que el proceso de inicio está casi terminado y que la aplicación se puede ocultar (lo que lleva unos segundos. Generalmente evito usar retrasos arbitrarios para este tipo de cosas):

tell application "SelfControl"
    launch
    repeat while (window 1 exists) is false
        delay 0.5
    end repeat
end tell
tell application "System Events"
    tell process "SelfControl"
        set visible to false
    end tell
end tell
    
respondido por el William T Froggard 24.08.2015 - 15:48

Lea otras preguntas en las etiquetas