Tengo un servicio de Automator que se compone de un único "Ejecutar AppleScript" acción. El AppleScript consiste básicamente en una serie de diálogos.
En medio del script, el script se basa en la pulsación de teclas command + C para obtener el texto enriquecido seleccionado en el script como the clipboard
. Este comando de copia debe caer en medio del script, ya que el usuario podría querer pegar el portapapeles real en el diálogo inicial.
Los diálogos de AppleScript en Servicios están por defecto anclados en la parte superior de todas las ventanas; no se puede cambiar esto.
AppleScript sólo es capaz de teclear command + C cuando la aplicación subyacente está enfocada, lo que tiene sentido, teniendo en cuenta que es la aplicación subyacente -- no el diálogo script -- la que contiene el texto seleccionado.
Así que formularé mi pregunta de forma poco elegante: ¿Existe una manera de hacer que la parte superior de la ventana inmediatamente detrás del diálogo de Servicio sea gris y así hacer que la barra superior del diálogo de Servicio sea blanca, mientras que todavía no se mueve el diálogo script fuera de la vista?
No puedo guiarme 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 poner en foco siempre estará inmediatamente detrás del diálogo de 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 pones el código anterior en un Servicio activado por atajo de teclado, verás que el script fallará al tell application "System Events" to keystroke "c" using {command down}
Así que.., theSelectedText
será idéntico al savedClipboard
siempre.