Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Q] AppleScript : monter un disque et quitter des applis

20 réponses
Avatar
blanc
Bonjour à tous,

J'essaie d'écrire un script qui :
- monte un disque
- quitte une certain nombre d'applis (je n'en mets qu'une ci-dessous)
- lance une appli particulière (X-Plane) et quitte Finder pour finir.


Voici le script (partiel) :

----------------------
tell application "Finder"
activate
if not (exists disk "Yad4") then
open "Vega:Users:jpb:scripts:monte_Yad4"
delay 10
end if
if not (exists disk "Yad4") then
exit
end if
end tell

tell application "Preview"
quit
end tell
[...]

tell application "Finder"
open file "Yad4:Applications_Y4:X-Plane 9:X-Plane"
quit
end tell
------------------------

Mes questions sont les suivantes :
- ligne 4 : je lance un shell-script pour monter le disque Yad4. Y
a-t-il une autre solution directement en AS ?
- ligne 5 : le "delay" est pour attendre que le disque soit monté. Y
a-t-il une autre solution ?
- ligne 8 : j'ai mis "exit" dans l'idée de terminer le script si le
disque n'a pas pu être monté. Mais AS me rajoute le mot clef "repeat".
Donc je suppose que ma commande n'est pas bonne. Que faut-il mettre à la
place de "exit" ?
- ligne 13 : Peut-on quitter une appli sans faire un "tell" à la dite
appli ?

Dans un autre script, je relance les applis ci-dessus quittées, et je
les cache :

-----------------------
tell application "Preview"
activate
end tell
[...]
tell application "System Events"
try
set visible of process "Preview" to false
end try
[...]
end tell
-----------------------

Est il possible de le faire plus simplement, sans avoir besoin de les
"activer" ?

--
JiPaul.
/ /--/--//\\ Jean-Paul Blanc
|/| L |\\\ quelquepart en (somewhere in)
\/|| = |||\\\ FRANCE

10 réponses

1 2
Avatar
Patrick Stadelmann
In article <1jykqm1.1ewuh0v1keqmymN%,
(JiPaul) wrote:

C'est ça que je reproche à AS : c'est tantôt ceci, tantôt cela.
Difficile de s'y retrouver... et surtout d'apprendre ce « langage ».



Le problème vient de l'implémentation par le Finder qui définit une
class "item" alors que "item" est aussi le mot clé qui permet d'accéder
aux éléments d'une liste.

Patrick
--
Patrick Stadelmann
Avatar
Patrick Stadelmann
In article <1jykryz.1wprc5ua7xduN%,
(JiPaul) wrote:

Autant pour moi, ça marche : apparemment il était juste caché sous
Spark. Mais le curieux, c'est qu'il n'apparaissait pas avec exposé.



C'est normal, Exposé ne montre que les fenêtres, pas les dialogues ni
les alertes.

Patrick
--
Patrick Stadelmann
Avatar
Patrick Stadelmann
In article <1jyks8u.187jl00k2lracN%,
(JiPaul) wrote:

- pourquoi n'est-il pas possible de faire un tel dialogue de
confirmation en dehors du Finder ?



"display dialog" est implémenté sous forme de "scripting additions". Ce
sont des fonctions natives (donc code x86) qui permettent d'ajouter des
commande au langage. Le code est chargé dans l'application qui exécute
le script. Ca peut être l'Editeur de script, "AppleScript Runner" pour
les script lancé par le menu Script, ...

En le mettant dans un "tell" tu force l'exécution dans le contexte de
l'application choisie. Par exemple :

tell application "TextEdit" to display dialog "Test"

va désactiver tous les menus de TextEdit tant que le dialogue est
affiché.

Ca c'est la situation sous Leopard. Le mécanisme est potentiellement un
trou de sécurité puisque qu'il permet d'injecter du code dans les
applications (c'est d'ailleurs utilisé par certains hacks depuis que
l'utilisation des Input Manager à été restreinte).

Depuis Snow Leopard, il n'est plus autorisé d'exécuter du code natif
(via une scripting additions) dans une autre application (via le
"tell"). Pour éviter de casser la comptabilité, AS redirige
automatiquement l'exécution du code natif vers le process qui exécute le
script. Donc dans ton cas, si tu es sous SL, ça n'est donc pas le Finder
qui exécute le "display dialog". Pour éviter la double redirection
(celle du "tell" puis celle, automatique), il est conseillé d'invoquer
les scripting additions soit en dehors de tout "tell", ou s'ils sont
dans un block "tell" car ils utilisent des classes / commandes d'une
application donnée, d'ajouter devant "tell current application to ...".

Patrick
--
Patrick Stadelmann
Avatar
blanc
Patrick Stadelmann wrote:

Donc dans ton cas, si tu es sous SL, ça n'est donc pas le Finder
qui exécute le "display dialog".



Je suis sous léo.

Pour éviter la double redirection
(celle du "tell" puis celle, automatique), il est conseillé d'invoquer
les scripting additions soit en dehors de tout "tell",[...]



Oui mais justement ma question : display dialog ne marche pas chez moi
en dehors du "tell appli Finder".

--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
blanc
Patrick Stadelmann wrote:

Le problème vient de l'implémentation par le Finder qui définit une
class "item" alors que "item" est aussi le mot clé qui permet d'accéder
aux éléments d'une liste.



OK. Merci...

--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
Patrick Stadelmann
In article <1jyoowj.akqzj542si4bN%,
(JiPaul) wrote:

Patrick Stadelmann wrote:

> Donc dans ton cas, si tu es sous SL, ça n'est donc pas le Finder
> qui exécute le "display dialog".

Je suis sous léo.

> Pour éviter la double redirection
> (celle du "tell" puis celle, automatique), il est conseillé d'invoquer
> les scripting additions soit en dehors de tout "tell",[...]

Oui mais justement ma question : display dialog ne marche pas chez moi
en dehors du "tell appli Finder".



C'est à dire ? Il ne s'affiche pas ? Tu l'exécute comment ? Tu peux
utiliser :

set a to name of current application
tell application "Finder" to display dialog a

pour déterminer qui exécute le script. Il faut bien entendu que
l'application ait accès à la GUI.

En tout cas ça marche chez moi en 10.5.8, par exemple dans TextEdit avec
un "tell". Sans "tell", c'est dans l'application qui exécute que le
script, par exemple l'Editeur de Script ou "AppleScript Runner" depuis
le menu Script.

Patrick
--
Patrick Stadelmann
Avatar
blanc
Patrick Stadelmann wrote:

C'est à dire ? Il ne s'affiche pas ?



Désolé. Il marche parfaitement. J'avais, pour tester, sorti aussi par
mégarde le
if not (exists disk "Yad4") then
open "Vega:Users:jpb:scripts:monte_Yad4"
end if
du "tell Finder".

Merci encore. :-)

--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
blanc
Patrick Stadelmann wrote:

C'est normal, Exposé ne montre que les fenêtres, pas les dialogues ni
les alertes.



Encore une question, Patrick :

Comment faire pour suspendre les économiseurs d'énergie et d'écran ?

Quand je lance X-Plane, lequel fonctionne avec un Yoke, je ne me sers
plus de la souris ni du clavier. Donc au bout de quelque minutes,
l'économiseur d'écran se met en route, puis l'économiseur d'énergie
m'éteint l'écran. Je souhaiterais donc me servir des deux scripts que
j'ai écrit (avec ton aide :-) pour :
- rendre inactifs ces deux économiseurs lorsque je lance X-plane
(dans le script de lancement qui quitte un certain nombre d'appli
bouffeuses de CPU)
- les rendre de nouveau actifs après avoir quitté X-plane
(dans le script qui me permet de relancer les applis précédentes)

J'ai cherché dans le dico de System Events : rien trouvé
J'ai cherché un dico pour System Préférences : rien trouvé

Donc je sollicite encore une fois ton aide :-/
--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
Patrick Stadelmann
In article <1jz7686.r2108jxa75j4N%,
(JiPaul) wrote:

Comment faire pour suspendre les économiseurs d'énergie et d'écran ?



Pour les économies d'énergie, c'est faisable avec "systemsetup" (voir le
man) via "do shell script". Pour l'économiseur d'écran, essaye avec :

defaults -currentHost write com.apple.screensaver idleTime 0

toujours via "do shell script" (0 pour désactiver, sinon le délai en
secondes).

Veiller à ce que les préférences système soient fermées, sinon tes
réglages risque d'être écrasé.

A noter que l'économiseur d'écran et d'autres préférences systèmes sont
directement gérées via System Events depuis 10.6.

Patrick
--
Patrick Stadelmann
Avatar
blanc
Patrick Stadelmann wrote:

Pour les économies d'énergie, c'est faisable avec "systemsetup" (voir le
man) via "do shell script". Pour l'économiseur d'écran, essaye avec :

defaults -currentHost write com.apple.screensaver idleTime 0

toujours via "do shell script" (0 pour désactiver, sinon le délai en
secondes).
[...]
A noter que l'économiseur d'écran et d'autres préférences systèmes sont
directement gérées via System Events depuis 10.6.



Pour ça on verra plus tard. En attendant ça marche. Merci à toi. Voici
mon script pour ceux que ça intéressent :


#!/bin/zsh
# econoff - enregistre les paramètres d'économiseurs (sous
# forme de commandes dans le script econon)
# et les désactive

ECONON=$HOME/scripts/econon

echo '#!/bin/zsh'>$ECONON

AA=`defaults -currentHost read com.apple.screensaver idleTime`

if [[ "$AA" != "0" ]]
then echo "defaults -currentHost write com.apple.screensaver idleTime
$AA">>$ECONON
defaults -currentHost write com.apple.screensaver idleTime 0
fi

AA=`systemsetup -getcomputersleep|cut -d -f 3`

if [[ "$AA" != "Never" && "$AA" != "Off" ]]
then echo "systemsetup -setcomputersleep $AA">>$ECONON
systemsetup -setcomputersleep Never
fi

AA=`systemsetup -getdisplaysleep|cut -d -f 4`

if [[ "$AA" != "Never" && "$AA" != "Off" ]]
then echo "systemsetup -setdisplaysleep $AA">>$ECONON
systemsetup -setdisplaysleep Never
fi

AA=`systemsetup -getharddisksleep|cut -d -f 4`

if [[ "$AA" != "Never" && "$AA" != "Off" ]]
then echo "systemsetup -setharddisksleep $AA">>$ECONON
systemsetup -setharddisksleep Never
fi
echo >> $ECONON
echo osascript -e 'tell application "Terminal">>$ECONON
echo ' set nb to count of windows'>>$ECONON
echo ' if nb > 1 then close first window'>>$ECONON
echo ' if nb <= 1 then quit'>>$ECONON
echo ' end tell'' &>>$ECONON
echo >> $ECONON

chmod u+x $ECONON

osascript -e 'tell application "Terminal"
set nb to count of windows
if nb > 1 then close first window
if nb <= 1 then quit
end tell' &


--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
1 2