Esegui lo script senza interrompere l'esperienza della GUI

0

Ho un AppleScript che apre automaticamente SelfControl.app per aiutare a evitare le distrazioni quando voglio lavorare. Lo script è molto simile a automatizza un filtro dei contenuti Internet e viene lanciato automaticamente da iCal su un set tempo.

Il problema è che quando lo script viene eseguito, la finestra si apre sullo schermo e se sto scrivendo qualcosa, la mia digitazione interferisce con la finestra di dialogo per l'inserimento della password, e lo script fallisce.

Come posso far funzionare lo script in modo indipendente dall'attività dell'utente? In altre parole, come posso eseguire lo script senza mostrare all'utente la prova della GUI che lo script è in esecuzione?

AppleScript

Di seguito è riportato uno snippet di codice. myTime e myPass sono definiti in precedenza nello 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
    
posta reynoldsnlp 24.08.2015 - 10:51
fonte

2 risposte

1

Questo può essere ottenuto dalla riga di comando usando il sistema defaults , come dimostrato nel sito github di SelfControl .

Per evitare il link-rot, copio il testo del sito di seguito:

In some cases, you may want to start a SelfControl block from the command line. This can make it much easier for advanced users to script their SelfControl blocks. This article explains how you can start SelfControl from the command line. If you're not familiar with the command line, this article is not for you.

  • Install SelfControl into your Applications folder.
  • Set your block preferences via the defaults system. The key values you'll need to set are BlockDuration (length of the block in minutes), HostBlacklist (an array containing the list of hosts to block/whitelist), and BlockAsWhitelist (makes it a whitelist instead of blacklist). There are more preferences if you want them; you can see them by running defaults read org.eyebeam.SelfControl (or just configure them in the app's preferences panel). Don't set BlockStartedDate, that's handled by the program automatically.
  • Run sudo /Applications/SelfControl.app/Contents/MacOS/org.eyebeam.SelfControl $(id -u $(whoami)) --install to start a block. It will automatically run checkups to see if the block needs removal every minute.
  • Wait for the block to expire. If you want to manually run a checkup to remove the block if necessary, you can do so with sudo /Library/PrivilegedHelperTools/org.eyebeam.SelfControl $(id -u $(whoami)) --checkup. If that doesn't remove the backup successfully, you can run our backup removal tool with /Library/PrivilegedHelperTools/scheckup.
    
risposta data 29.10.2015 - 14:51
fonte
0

Puoi provare a lanciare "SelfControl" in background, quindi nasconderlo (anche se il semplice avvio in background potrebbe essere sufficiente nel tuo caso). L'idea è di nascondere l'applicazione quando viene visualizzata una finestra, che indica che il processo di avvio è in gran parte eseguito e l'applicazione può essere nascosta (che richiede alcuni secondi.) In genere evito di usare ritardi arbitrari per questo tipo di cose):

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
    
risposta data 24.08.2015 - 15:48
fonte

Leggi altre domande sui tag