Dispongo di un servizio di automazione composto da una singola azione "Esegui AppleScript" . L'AppleScript consiste fondamentalmente in una serie di finestre di dialogo.
Nel mezzo dello script, lo script si basa sulla sequenza di tasti ⌘ comando + C per ottenere il rich text selezionato nello script come the clipboard
. Questo comando di copia deve trovarsi nel mezzo dello script, poiché l'utente potrebbe voler incollare gli appunti reali nella finestra di dialogo iniziale.
Le finestre di dialogo di AppleScript in Servizi sono di default bloccate in cima a tutte le finestre; non puoi cambiarlo.
AppleScript è in grado di battere il tasto ⌘ comando + C solo quando l'app sottostante è a fuoco, il che ha senso, considerando che è l'app sottostante - non il finestra di dialogo script - che contiene il testo selezionato.
Quindi, inserirò la mia domanda in modo inelegante: c'è un modo per rendere la parte superiore della finestra immediatamente dietro la finestra di dialogo Servizio grigio e quindi rendere bianca la barra superiore della finestra di dialogo Servizio, senza tuttavia spostare la finestra di dialogo dello script fuori dalla vista?
Non posso passare dal titolo della finestra o dell'app della finestra, perché queste variabili possono variare. La costante è che la finestra che voglio mettere a fuoco sarà sempre immediatamente dietro la finestra di dialogo del servizio.
Quello che segue è un esempio di ciò di cui sto parlando:
-- Back up original clipboard contents:
set savedClipboard to the clipboard
set optionList to {"Uppercase case"}
set dialogBoxChoice to choose from list optionList with title "Change case of selection" with prompt "Choose a letter case:"
-- Copy selected text to clipboard:
tell application "System Events" to keystroke "c" using {command down}
delay 1 -- Without this, the clipboard may have stale data.
set theSelectedText to the clipboard
-- Makes the selected text all uppercase:
-- From: http://apple.stackexchange.com/a/171196/184907
set theModifiedSelectedText to (do shell script ("echo " & theSelectedText & " | tr a-z A-Z;"))
display dialog theModifiedSelectedText
-- Overwrite the old selection with the desired text:
set the clipboard to theModifiedSelectedText
tell application "System Events" to keystroke "v" using {command down}
delay 1 -- Without this delay, may restore clipboard before pasting.
-- Restore clipboard:
set the clipboard to savedClipboard
Se inserisci il codice sopra in un servizio attivato da scorciatoie da tastiera, vedrai che lo script non riuscirà a tell application "System Events" to keystroke "c" using {command down}
; quindi, theSelectedText
sarà identico a savedClipboard
ogni volta.