Tengo un servicio de Automator que se compone de una única acción "Ejecutar AppleScript" . El AppleScript consiste básicamente en una serie de diálogos.
En la mitad del script, el script se basa en el comando key command + C para obtener el texto enriquecido seleccionado en el script como the clipboard
. Este comando de copia debe estar en el medio de la secuencia de comandos, ya que el usuario podría pegar el portapapeles real en el cuadro de diálogo inicial.
Los cuadros de diálogo de AppleScript en Servicios se fijan por defecto en todas las ventanas; no puedes cambiar esto.
AppleScript solo puede pulsar ⌘ comando + C cuando la aplicación subyacente está enfocada, lo cual tiene sentido, considerando que es la aplicación subyacente, no la Diálogo de script: que contiene el texto seleccionado.
Por lo tanto, pondré mi pregunta poco a poco: ¿Hay alguna forma de hacer que la parte superior de la ventana que está inmediatamente detrás del cuadro de diálogo de Servicio en gris se convierta en la barra superior del cuadro de diálogo de Servicio en blanco, sin mover el cuadro de diálogo del script? fuera de la vista?
No puedo ir por el título de la ventana o la aplicación de la ventana, porque estas variables variarán. La constante es que la ventana que quiero enfocar siempre estará detrás del cuadro de diálogo Servicio.
El siguiente es un ejemplo de lo que estoy hablando:
-- 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
Si coloca el código anterior en un Servicio activado por un método abreviado de teclado, verá que la secuencia de comandos fallará a tell application "System Events" to keystroke "c" using {command down}
; por lo tanto, theSelectedText
será idéntico al savedClipboard
cada vez.