0 votos

Hacer que script se ejecute sin interrumpir la experiencia de la GUI

Tengo un AppleScript que abre automáticamente SelfControl.app para evitar distracciones cuando quiero estar trabajando. El script es muy similar a automatizar un filtro de contenidos de Internet y es lanzado automáticamente por iCal a una hora determinada.

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

Cómo puedo conseguir 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 se muestra un fragmento de código. myTime y myPass se definen antes en el script:

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

1voto

Tobias Puntos 415

Esto puede lograrse desde la línea de comandos utilizando la función defaults sistema, como se ha demostrado en el sitio github de SelfControl .

Para evitar el link-rot, copio el texto del sitio a continuación:

En algunos casos, es posible que desee iniciar un bloque de SelfControl desde la línea de comandos. Esto puede facilitar a los usuarios avanzados la tarea de script sus bloques de SelfControl. 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.

  • Instala SelfControl en tu carpeta de aplicaciones.
  • Establezca sus preferencias de bloqueo a través del defaults sistema. Los valores clave que tendrá que establecer son BlockDuration (duración del bloque en minutos), HostBlacklist (un array que contiene la lista de hosts a bloquear/lista blanca), y BlockAsWhitelist (hace que sea una lista blanca en lugar de una lista negra). Hay más preferencias si las quieres; puedes verlas ejecutando defaults read org.eyebeam.SelfControl (o simplemente configurarlos en el panel de preferencias de la aplicación). No configures BlockStartedDate El programa se encarga de ello automáticamente.
  • Ejecutar sudo /Applications/SelfControl.app/Contents/MacOS/org.eyebeam.SelfControl $(id -u $(whoami)) --install para iniciar un bloque. Cada minuto ejecutará automáticamente comprobaciones para ver si el bloque necesita ser eliminado.
  • Espere a que expire el bloqueo. Si desea ejecutar manualmente una comprobación 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 con éxito, puede ejecutar nuestra herramienta de eliminación de copias de seguridad con /Library/PrivilegedHelperTools/scheckup .

0voto

William T Froggard Puntos 2862

Puedes probar a lanzar "SelfControl" en segundo plano y luego ocultarlo (aunque, en tu caso, puede bastar con lanzarlo en segundo plano). La idea es ocultar la aplicación una vez que aparezca una ventana, indicando que el proceso de lanzamiento ha terminado en su mayor parte, y la aplicación se puede ocultar (lo que lleva unos segundos. En general, evito utilizar 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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X