Curso Applescript: Utilizar aplicaciones “desconocidas”, por Julifos

Algunas veces nos encontramos desarrollando una utilidad que será utilizada por un “amplio” público (por ejemplo, un script para InDesign) y resulta-deque ese amplio público puede ser de distintas nacionalidades y tener distintas versiones de InDesign.

Por ejemplo:

tell application “InDesign 2.0”

 open alias “path:to:file”

end tell

Funciona en mi ordenador (sí!), pero no funciona en el que tengo al lado, con otra versión de InDesign, porque la aplicación se llama “Adobe InDesign”; ni en otro que tengo con el OS X 10.2.5 en japonés, porque la aplicación se llama “whanchuchang 2”. Y me puede ocurrir lo mismo con un script para FreeHand (por ejemplo, “FreeHand 10” y “FreeHand MX”). El script hace lo mismo sea cual sea la versión, pero cuando ejecutemos:

tell application “FreeHand 10”

… En un equipo donde está instalado el “FreeHand MX”, nos saldrá un cuadrito de diálogo diciendo “¿Dónde se encuentra la aplicación FreeHand 10?”, lo cual puede resultar molesto al usuario y, más aún, despistarle y sumirle en la más profunda de las miserias porque, al no tener FreeHand 10, pensará que su vida es inútil.

Esta es la razón por la que, en ciertas ocasiones, debemos chequear si podemos utilizar una aplicación “desconocida” .

Saber si la aplicación está abierta

El método más seguro para saber si una aplicación está abierta o no es preguntárselo al Finder, que es la portera del edificio y lleva las cuentas de quién está y quién no:

tell application “Finder”

 name of processes

end tell

–> {“Dock”, “Finder”, “InDesign 2.0”, “Script Editor”}

Por ejemplo. El Finder aquí nos devuelve la propiedad “name” de los “processes” (o sea, las aplicaciones abiertas). Ahora podemos saber si la aplicación que buscamos está o no abierta:

if “InDesign 2.0” is in contents of result then –>…

Si devuelve “true”, es que “InDesign 2.0” está abierto. ¿Pero qué pasará si nuestro usuario es japonés o tiene el “InDesign 2.5”?

El método más seguro es preguntar por el “creator type” de los “processes”; a saber: la firma de cuatro caracteres única e intransferible de la aplicación en concreto. En el caso de InDesign, esta firma es “InDn”. Y, en teoría, sea cual sea el nombre y la versión de InDesign de nuestro usuario, esta firma permanecerá inmutable:

tell application “Finder”

 creator type of processes

 if “InDn” is in contents of result then

  display dialog “InDesign está abierto”

 else

  display dialog “InDesign no está abierto”

 end if

end tell

Pues ello.

Hay ocasiones en que los programadores se comportan de manera absurda y cambian el “creator type” del programa a cada nueva versión (es el caso de FreeHand), pero no es muy usual. En esos casos, tendremos que rompernos la cabeza un poco más y preguntar al Finder por las versiones que nos interesen (por ejemplo “FH9 ” o “FH X”).

saber si la aplicación EXISTE

Suponemos que el señor que ha descargado nuestro trabajo se ha leído los requerimientos para que pueda funcionar. Pero, por si acaso, podemos preguntar al Finder si existe una aplicación en el equipo del cliente:

tell application “Finder”

 try

  application file id “InDn”

 on error

  display dialog “Usted no tiene instalado el InDesign, sinvergüenza!”

 end try

end tell

En OS X podemos, además, preguntar por el domain, que viene a ser el nombre de las preferencias de la aplicación, típicamente formateadas como “extensión.dominio.aplicación.plist” (pero omitiendo el “plist”). Veamos un ejemplo:

tell application “Finder”

 try

  application file id “com.adobe.InDesign”

 on error

  display dialog “Usted no tiene instalado el InDesign, sinvergüenza!”

 end try

end tell

Averiguar la versión de la aplicación

También nos puede venir bien conocer la versión de la aplicación que nos interesa. Puede, por ejemplo, que nuestro script esté pensado para ser utilizado en versiones de Acrobat superiores a la 6.0:

tell application “Finder” to ¬

 set shortVersion to short version of (info for (application file id “CARO” as alias))

if shortVersion < "6.1" then display dialog “Este script requiere Acrobat 6.1 ó superior, canalla!”

Aquí hemos cogido la localización del Acrobat (application file id “CARO”) y hemos utilizado el comando “info for”, de las Adiciones Estándar, para averiguar su versión “corta” (el numerito). Suponiendo que el usuario tenga instalada la versión “6.0”, un diálogo le informará de los requisitos del script.

Utilizar la aplicación sin conocer su nombre

Ya hemos dicho que hay posibilidades de que una aplicación tenga distintos nombres, según el usuario. Así que, cuando nuestra copia de FileMaker se llame “FileMaker Pro” y la del usuario “FileMaker Pro OSX”, queremos evitar que el script le pregunte: “Oiga, ¿dónde está la aplicación FileMaker Pro, que no la encuentro?”.

Para ello, primero preguntaremos al Finder el nombre de la aplicación, basándonos en su creator type, y luego utilizaremos ese nombre cogido sobre la marcha para mandarle órdenes. Llamar a una aplicación a través de una variable (por ejemplo, “tell application x”) implica que nuestro editor de scripts no puede acceder a su terminología (no puede encontrar los comandos de la aplicación “x”), así que utilizaremos el truco del almendruco: using terms from.

tell application “Finder” to ¬

 set appName to name of (application file id “FMP5”)

tell application appName

 using terms from application “FileMaker Pro”

  count records of database 1

 end using terms from

end tell

Ya está. El script utilizará al ejecutarse el nombre de la copia local de FileMaker (la que tenga el usuario instalada). Y para compilar el código, se utilizará la terminología del FileMaker del que la compila (o sea, la suya de usted), según se define en el statement “using terms from”.

Si, por hacer una prueba, eliminamos el rollo del “using terms from”, veremos al intentar compilar que se producen errores, ya que se utiliza terminología perteneciente a FileMaker, aplicación a la que NO estamos llamando en el “tell application appName” (ya que appName sólo significará algo cuando el script se ejecute y el Finder le asigne un valor).

Los restantes artículos sobe AppleScript se pueden encontrar en la categoría de Tutorial

0 0 votos
Article Rating
Subscribe
Notify of
1 Comment
Oldest
Newest Most Voted
Opiniones Inline
Ver todos los comentarios
Anónimo
Anónimo
17 years ago

Hombre, estan muy buenos estos cursos de este señor. Por lo que propongo todo lo este tutorial en .pdf . Gracias.

1
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x