FAQ3

SUJET:
Ouvrir un fichier à l'ouverture d'un dossier

QUESTION:
bonjour.
j'aimerais faire en sorte qu'un fichier son se declenche a l'ouvertured'un dossier mais etant un incapable notoire en programation je ne suis pas parvenu a ecrire un script de dossier pour cette fonction a priori plutot simple.
pouvez vous m'envoyer un exemple d'un tel script?
merci
ps: je suis sous OS 8,6
anesthesistes polyclinique

REPONSE:
Pour qu'un script se déclenche à l'ouverture d'un dossier, la formule magique est du type :
on opening folder This_Folder,
avec This_folder qui contient le chemin d'accès complet au dossier.
Pour ouvrir un fichier c'est du type :
tell application "Finder" open file Chemin_Fileend tell
avec Chemin_File du type : "sound" of folder "sound folder" of startup disk
ce qui nous donne le script suivant :
on opening folder This_Folder
   tell application "Finder" 
     open file "sound" of folder "sound folder" of startup disk
   end tell
end opening folder
On attache le script au dossier par un Ctrl sur le dossier.


SUJET:
Automatiser une connexion ADSL

QUESTION:
j'ai un problème dans un script
il vise a automatiser la connexion adsl à l'allumage du mac
on run
   with timeout of 9999 seconds
      tell application
         "Lan TunnelBuider Settings"
         connect
         Wanadoo
        tell application "Netscape Communicatorô" to run
        end tell
   end timeout
end run
il coince à connect!
je suis un grand débutant!!! alors soyez magnanimes
jml

REPONSE:
Personnellement je n'ai pas d'adsl, je n'habite pas au bon endroit ! donc je ne pourrais pas tester le script.
A la première lecture ce script ne peut pas fonctionner tel que. Je vais énumérer les points qui ne vont pas, dans l'ordre de leur apparition :
- un script AppleScript fonction sur ce que l'on appelle des AppleEvent. Ce sont des messages qui sont envoyés à une application, messages qui demandent une réponse. Le temps que l'application a pour répondre est de l'ordre de la seconde. Ce qui est trop court dans certains cas, tel qu'ici pour une connexion à Internet. C'est pourquoi on emploie une structure "with timeout", qui permet de spécifier un temps pour la réponse de l'application. Ici la structure est juste, je descendrai simplement le temps de réponse à 5 minutes (300 seconds) qui me semble largement suffisant.
- un script est lu ligne par ligne, chaque ligne doit contenir la phrase en entier. La phrase :
tell application
   "Lan TunnelBuilder Settings"
n'est pas correct, car elle n'est pas sur la même ligne. Il faut donc la corriger en :
tell application "Lan TunnelBuilder Setting".
Lors d'une phrase trop longue et pour des questions de lisibilité, il est possible de couper une ligne. Dans ce cas il faut employer un caractère spéciale : ¬
Ce caractère s'obtient par un option-retour chariot, et indique à AppleScript que les lignes n'en font qu'une.
- Est-ce que "Wanadoo" fait parti du dictionnaire de "Lan TunnelBuider Settings" ? Si oui, alors c'est correct, sinon il faut expliquer à "Lan TunnelBuider Settings" ce que veut dire "Wanadoo".
- AppleScript travaille avec une application dans la structure
tell application "Nom de l'application"
...
end tell
Si dans cette application on envoi un appel à une autre application, cela revient à demander à la première application de travailler avec la seconde.
Ce qui n'est pas le cas ici. Il faut donc sortir le
tell application "Netscape Communicatorô" to run
de la structure
tell application "Lan TunnelBuider Settings"
..
end tell
Ce qui nous donne:
tell application "Lan TunnelBuider Settings"
..
end tell
tell application "Netscape Communicatorô"
..
end tell
Donc après ces corrections de syntaxes cela nous donne :
on run
   with timeout of 300 seconds
   tell application "Lan TunnelBuider Settings"
      connect
      wanadoo
   end tell
   end timeout
   tell application "Netscape Communicatorô"
      run
   end tell
end run
Je pense que
"connect
wanadoo"
n'est pas suffisant. [...]
Au lieu de:
"connect
wanadoo"
il faut mettre:
connect using configuration "Wanadoo"
en supposant que votre configuration Remote Access s'appelle "Wanadoo", sinon mettre le nom de votre configuration pour une connexion "PPP".


SUJET:
Traitement d'un fichier lorsqu'il est mis dans un dossier

QUESTION:
bonjour,
je m'appelle olivier et je cherche quelqu'un qui pourrait me donner un coup de main pour m'aider a faire un script de dossier.
je veux faire un truc tout bête mais j'ai des difficultés.
L'objectif de ce script est que lorsque l'on met un fichier pdf dans un dossier, le logiciel acrobat s'ouvre et exporte le fichier en eps.
merci de votre aide
olivier

REPONSE:
La phrase magique pour un ajout d'élément dans un dossier ouvert c'est :
on adding folder items to My_Folder after receiving My_Fichiers
Faire attention que ce n'est valable que si la fenêtre du dossier est ouverte. Sinon il ne se passe rien.
My_Folder contient l'adresse du dossier,
My_Fichiers contient l'adresse du ou des fichiers introduits dans le dossier My_Folder.
Dans le cas présent il ne faut traiter que les fichiers de type "PDF ", signature des fichiers d'Acrobat (les lettres PDF, plus un espace : "PDF ", une signature a toujours 4 lettres). Pour connaître la signature d'un fichier :
file type of (info for The_File)
avec The_file de type : alias "Disque:Mon fichier"
Pour la suite, malheureusement, il ne m'est pas possible de décrire ce qu'il faut faire pour ouvrir un fichier sous Acrobat, et encore moins pour l'enregistrer au format EPS: je ne possède que le reader d'Acrobat.
Donc pour le début, cela nous donne un truc du genre :
on adding folder items to My_Folder after receiving My_Fichiers
   repeat with m in My_Fichiers
      set The_type to file type of (info for m)
      if The_type is "PDF " then
         tell application "Acrobat"
            -- ici traitement du fichier par Acrobat
         end tell
      end if
   end repeat
end adding folder items to
Pour attacher un script à un dossier, faire un Ctrl-clic sur celui-ci.

 

SUJET :
Quitter automatiquement toutes les applications, sans enregistrer les documents et éteindre le Mac.
 
QUESTION :
Bonjour,
je cherche un script me permettant de qui de fermer les documents en cours en registrant les modif et quitter toutes les appli sauf le finder.
tout ça automatiquement à une heure donnée.
merci d'avance
thomas
 
REPONSE :
Bonjour,
Pour lancer un script à une heure donnée, vous avez le programme
iDo Script Scheduler 1.0
livré sur les cds système MacOs 8.6 et MacOs 9, ou directement sur le site (650 Ko):
http://applescript.pratique.online.fr/divers/iDoScriptS
http://www.sophisticated.com
 
Pour quitter tous les programmes la formule est du type:
tell application "Finder"
set Mes_Appli to name of (every application process whose visible is true)
end tell
repeat with m in Mes_Appli
tell application m to quit
end repeat
 
Par contre pour que les documents soient enregistrés à la fermeture de l'application, il faut le faire application par application :
Tell application "Untel"
close whit save yes
end tell
avec la phrase : "close whit save yes" propre à chaque application, qui est fournie par le dictionnaire de chaque application.
Si une application n'est pas AppleScriptable, il n'y a pas de solution.
Le script nous donne :
tell application "Finder"
set Mes_Appli to name of (every application process whose visible is true)
end tell
repeat with m in Mes_Appli
if m is "Appli1" then
tell application m
close all document whit save yes
quit
end tell
else if m is "Appli2" then
tell application m
quit with save
end tell
-- etc, autant de fois qu'il peut y avoir d'applis
end if
end repeat
 
QUESTION (suite) :
Tu a bien compris que mon problème reste en effet de fermer et sauver les fichiers ouverts sans avoir à toucher à la machine.
 
Cependant , je reviens vers toi pour savoir s'il n'y a vraiment aucune solution à mon problème
...
La liste des applis principales à quitter est:
 
Photoshop
Xpress
Illustrator
Suitecase
Outlook 98
Word
excel
 
La majorité des docs ne sont pas à sauvegarder (sinon le user l'aurait fait)il faut donc juste quitter l'appli sans enregistrer les doc en cours, cela nous évite le prob des fichiers sans titre à batiser et à caser (faut pas charier de trop ....).
 
Concernant la phase d'enregistrement du fichier lorsque l'on quitte c'est soit ne pas enregistrer soit non mais si tu as la syntaxe en apple script je remplacerais les mots exacte.
Sinon, concernant ce point, si tu as les commandes pour faire du "clavier virtuel" la solution serait
 
Pomme W = non
Pomme Q
 
et l'affaire est dans le sac .... peut un peu simplet mais bon pourquoi pas????
 
Merci encore pour ton attention
 
cordialement
 
Thomas
 
REPONSE (SUITE) :
Il existe une solution en utilisant FaceSpan, pour cela il me faudrait quelques renseignements complémentaires:
1°) La liste des applications à quitter
2°) Le nom du boutton, par application, qui permet l'enregistrement s'il y a lieu ("Enregistrer", "Ok" etc)
3°) Est-ce qu'il peut y avoir des documents où il faut en plus définir sous quel nom et à quel endroit il faut l'enregistrer (dans le cas de nouveaux documents) ?
...
Je n'ai pas fais un test sur toutes les applis de la liste, il est possible qu'une ne réponde pas, dans ce cas me signaler laquelle et le mot qui correspond à "Ne pas enregister".
C'est un script brut de pomme, faire des tests avant de le laisser fonctionner tout seul...
Ce script fonctionne avec trois éléments :
- "Quitte tout", le programme proprement dit qui quitte toutes les applications et éteint l'ordinateur. Ce script applicatif est écrit avec FaceSpan.
- "Quitte tout.scp", un script qui n'a qu'une action : lancer "Quitte tout".
Pour lancer "Quitte tout" à une heure donnée, j'utilise le troisième élément : "iDo Script Scheduler". Ce programme permet de paramétrer le lancement d'un script à une heure donnée.
"iDo Script Scheduler" se trouve sur les cds de MacOs 8.6 et 9.0 ou sur le site :
http://www.sophisticated.com
Fonctionnement :
- mettre "Quitte tout" et "Quitte tout.scp" n'importe où, mais ensemble.
- depuis "iDo Script Scheduler", paramétrer "Quitte tout.scp" pour qu'il se lance à une heure donnée, à des jours données.
 
On peut changer le nom de "Quitte tout.scp" mais pas celui de "Quitte tout", sinon le programme risque de se fermer lui-même en cours d'exécution.
=> quitte tout.sit (436 Ko)
=> iDo Script Scheduler
 
SUJET :
Eviter l'erreur : "Délais dépassé pour un Apple Event"
 
QUESTION :
Je voulais dire :
Par contre, je sais que pour les délais d'Apple Events il faut un OSAX mais je ne souhaite pas les utiliser. Alors quand j'appelle le script Synchro Icônes depuis Synchro Dossiers, n'y a t-il vraiment pas moyen de quitter le script appelant ? car à chaque fois (ou presque, dès que le dossier est volumineux) il y a une erreur "Délais dépassé pour un Apple Event"
 
REPONSE :
Il existe deux solutions :
- soit on a besoin de la reponse de l'appelé
- soit on en a rien à faire
 
Par défaut Applescript attend une réponse à tout Apple Event envoyé, réponse dans un laps de temps donné : 1 minute.
Ce temps de réponse peut être controlé par la syntaxe suivante (soit pour diminuer ce temps, soit pour l'augmenter):
with timeout of 5 seconds
     tell application "AppleWorks"
      close front document saving ask
     end tell
end timeout
 
Il est possible d'éliminer complètement ce temps de réponse, dans ce cas tout envoie d'Apple Event à une application n'attend aucune réponse de la part de cette application :
ignoring application responses
     tell application "AppleWorks"
      close front document saving ask
     end tell
end ignoring
 
Le danger de cette syntaxe, c'est que l'on a aucun moyen de savoir si l'application a bien reçu et exécuté la commande envoyée. Par contre c'est un moyen pour accélérer l'exécution d'un script : une des raisons de la lenteur d' AppleScript c'est justement ces temps de réponses, qui bien souvent peuvent être supprimés. AppleScript passe plus de temps à attendre quelque chose qu'à exécuter du code.