Come rielaborare un comando "Eventi di sistema" in AppleScript, in modo che funzioni automaticamente in tutte le applicazioni?

4

Con il seguente codice AppleScript all'interno di un'azione "Esegui AppleScript" in un servizio:

tell application "System Events"
    set theSBounds to {{572, 64}, {332, 515}}
    set position of window "Google Hangouts - [email protected]" of application process "Google Chrome" to item 1 of theSBounds
    set size of window "Google Hangouts - [email protected]" of application process "Google Chrome" to item 2 of theSBounds
end tell

il servizio funzionerà solo se l'applicazione da cui è stato chiamato quel servizio è stata aggiunta all'elenco delle applicazioni in "Consenti alle app in basso di controllare il tuo computer." Questo elenco è disponibile all'indirizzo Preferenze di sistema → Sicurezza e amp; Privacy → Accessibilità.

È possibile modificare il codice AppleScript in qualche modo in modo che l'aggiunta di ogni applicazione sul proprio computer alla lista non sia necessaria? Oppure, in modo che, è sufficiente aggiungere un elemento alla lista, al contrario di ogni applicazione sul proprio computer?

Ho pensato che qualcosa del genere potesse funzionare:

do shell script "osascript -e 'tell application \"System Events\"' -e 'set theSBounds to {{572, 64}, {332, 515}}' -e 'set position of window \"Google Hangouts - [email protected]\" of application process \"Google Chrome\" to item 1 of theSBounds' -e 'set size of window \"Google Hangouts - [email protected]\" of application process \"Google Chrome\" to item 2 of theSBounds' -e 'end tell'" with administrator privileges

ma questo codice richiede anche che l'applicazione da cui viene eseguito il servizio sia aggiunta all'elenco di accessibilità.

Nota: voglio solo eseguire questo AppleScript come servizio, e non in un'applicazione creata da Automator, perché il codice riceve il testo selezionato come input (a livello di sistema).

    
posta rubik's sphere 04.02.2017 - 03:44
fonte

1 risposta

2

Ho trovato una soluzione accettabile (vale a dire, soluzione alternativa).

Inserisci il blocco di codice "Eventi di sistema" in un'azione "Esegui AppleScript" e salvalo come file di applicazione in Automator. Nota: l'estensione del file di questo codice deve essere .app in modo che funzioni (più su questo in un momento).

Vai a Preferenze di Sistema → Sicurezza e amp; Privacy → scheda Privacy → Accessibilità. Aggiungi e seleziona l'applicazione appena creata nell'elenco delle app autorizzate a controllare il tuo computer.

Esegui l'app appena creata dal tuo Servizio. Per fare ciò, puoi aggiungere la seguente riga al tuo codice AppleScript:

do shell script "osascript -e 'tell application \"Application Name\" to activate'"

(utilizzo abitualmente osascript in activate applicazioni quando si utilizza un'azione "Esegui AppleScript" in un servizio, poiché questo elude un con i servizi che ho scoperto .)

Il tuo Servizio dovrebbe ora funzionare perfettamente in ogni applicazione sul tuo computer, nonostante il fatto che solo una applicazione (quella che contiene il codice "Eventi di sistema") abbia esplicitamente ottenuto il potere di controllare il computer.

Il file deve essere salvato come file .app e non come file .scpt o .applescript. Questo perché non è possibile aggiungere i file .scpt o .applescript all'elenco delle app autorizzate a controllare il computer; solo i veri file .app possono essere selezionati nella finestra di dialogo.

Si noti che il file .app non deve essere creato in Automator. Se crei il file .app in Script Editor.app e segui gli altri passaggi, il file .app funzionerà allo stesso modo.

C'è una differenza, tuttavia. Quando il file .app viene creato in Automator, è possibile utilizzare activate o launch per eseguire l'applicazione nel loro servizio. Ma quando il file .app viene creato in Script Editor, si può usare solo activate per eseguire l'applicazione; launch non produrrà nulla.

    
risposta data 04.02.2017 - 16:59
fonte

Leggi altre domande sui tag