Introduction▲
Cette note Technique montre plusieurs exemples différents qui utilisent la commande « Lancer Process Externe ». Elle permet de donner une idée sur les différentes possibilités d'utilisation de cette commande. LANCER PROCESS EXTERNE a été ajouté au langage dans 4D 2004.
La couche sous-jacente d'Unix de Mac OS X a beaucoup d'applications et utilités que vous pouvez utiliser grâce à LANCER PROCESS EXTERNE. Presque tout ce qui peut s'exécuter dans le Terminal peut s'accomplir aussi avec LANCER PROCESS EXTERNE.
Lorsque vous travaillez sur Windows vous avez accès à l'ensemble des commandes du DOS.
À propos de l'exemple▲
4D System Tool est une application qui est divisée fondamentalement en deux parties. Puisque nous traitons directement des appels système, il y a très peu de choses qui peuvent être utilisées communément sur les deux plateformes. L'interface et les commandes disponibles sont par conséquent complètement différentes sous chaque plateforme. Pour pouvoir apprécier le résultat sur les deux plateformes, l'exemple doit être exécuté sur Mac OS X et Windows XP.
Notez que cet exemple suppose que vous utilisez Mac OS X 10.4 et/ou Windows XP. Aucun des exemples n'a été testé sur des versions antérieures de ces systèmes respectifs.
En utilisant l'Exemple – Mac OS X▲
Sur Mac OS X l'application est semblable aux utilitaires tels que Cocktail, Onyx ou TinkerTool. Lorsque l'application est lancée quatre boutons de la barre d'outils seront disponibles : Apparence, Maintenance, Man et info.
L'outil « Apparence » permet de changer les divers paramétrages dans le Finder, le Dock, Safari, et d'autres applications. Vous pouvez changer la manière dont les barres de défilement apparaissent, le comportement du Dock et montrer ses icônes, les images disque manipulées, et divers autres paramétrages.
L'outil « Maintenance » permet d'exécuter une commande Périodique, réparation des autorisations disque, mettre à jour le prébinding et voir quelques informations sur le disque de démarrage.
L'outil « Man » permet de visualiser les pages du Man et de les enregistrer comme documents PDF ou HTML. Les pages du Man (manuel) sont la documentation fournie pour toutes les commandes disponibles de la couche Unix.
L'outil « Info » affiche plusieurs informations sur le système que vous utilisez, comme la version du Kernel, la mémoire installée, la vitesse de processeur, etc.
Vous pouvez sélectionner aussi « Exécuter la commande » du menu Fichier pour ouvrir un dialogue qui permettra d'exécuter n'importe quelle commande directement. Soyez prudent quand vous utilisez cet outil, car vous risquez d'endommager votre système si vous exécutez la mauvaise commande.
En utilisant l'Exemple – Win XP▲
Lorsque l'application est exécutée sur Windows XP vous aurez un ensemble différent de commandes disponibles. Les quatre boutons disponibles de la barre d'outils sont : « Maintenance », « Taches », « Exécuteur Rapide » et « Info ».
Avec l'outil « Maintenance » vous pouvez défragmenter un volume ou placer un volume à vérifier par le chkdsk au prochain démarrage.
L'outil « Tâches » vous montrera tous les processus courants et vous permettra de stopper un processus. C'est fondamentalement identique au Gestionnaire de tâches quand vous tapez Ctrl-Alt-Suppr.
L'« Exécuteur Rapide » affiche une liste de plusieurs outils que vous pouvez exécuter à partir de la commande Exécuter.
Quelques-uns de ceux-ci vous sont disponibles à travers l'interface XP standard, tels que Ajout/Suppression de programmes, et d'autres sont seulement disponibles en les exécutant par l'invite de commande. Vous pouvez ajouter ou enlever des programmes de la liste en utilisant les boutons « Ajouter » et « Supprimer » en bas du dialogue. La liste d'applications est archivée dans un fichier XML dans le dossier Extras.
L'outil « Info » affiche diverses informations sur votre système, comme la version de Windows, la mémoire installée, la vitesse du processeur, etc.
Entrée dans le code▲
Chaque appel qui est fait à une application de système passe par la méthode projet ST_comm_executeCommand :
C_TEXTE
(
$1
;
$0
;
$command_t
;
$inputStream_t
;
$outputStream_t
;
$errorStream_t
)
C_BOOLEEN
(
$2
;
$needsAuthorization_b
)
$command_t
:=
$1
$b_needsAuthorization
:=
$2
$inputStream_t
:=
""
$outputStream_t
:=
""
$errorStream_t
:=
""
Si
(
$needsAuthorization_b
)
Si
(<>
ST_userName_t=
""
)
|
(<>
ST_password_t=
""
)
$inputStream_t
:=<>
ST_password_t
Sinon
$inputStream_t
:=<>
ST_password_t
Fin de si
Fin de si
Si
(<>
ST_ONWINDOWS_b)
FIXER VARIABLE ENVIRONNEMENT
(
"_4D_OPTION_HIDE_CONSOLE"
;
"True"
)
Fin de si
LANCER PROCESS EXTERNE
(
$command_t
;
$inputStream_t
;
$outputStream_t
;
$errorStream_t
)
ST_error_setError (
$errorStream_t
)
$0
:=
$outputStream_t
Cette méthode est passée avec deux paramètres : la commande à exécuter et un booléen indiquant si cette commande aura besoin d'autorisation (pour les commandes d' OS X seulement).
Si l'autorisation est nécessaire, un contrôle est fait pour voir si le nom de l'utilisateur et le mot de passe ont été précédemment fournis par l'utilisateur. Sinon, un dialogue s'ouvre pour les demander.
Quand l'application tourne sur Windows un appel est fait à FIXER VARIABLE ENVIRONNEMENT ainsi la console ne s'ouvrira pas pendant que la commande s'exécute !
Enfin l'appel à LANCER PROCESS EXTERNE est fait, sauvant n'importe quelle erreur qui est reçue et renvoyant le résultat à la méthode appelante.
Exemples de codes▲
Un exemple simple montrant comment utiliser ST_comm_executeCommand est dans la méthode de projet ST_app_startup (line 32):
<>
ST_userName_t:=
ST_comm_executeCommand (
"whoami"
;
Faux
)
Le whoami est une fonction d'Unix qui renvoie simplement le nom de l'utilisateur courant. Ceci est exécuté au démarrage comme une facilité aux utilisateurs ainsi ils n'auront pas à écrire leur nom d'utilisateur quand le dialogue d'authentification est affiché.
Pour l'exécution des commandes plus complexes, nous devons les construire de façon à être correctement exécutées. Pour l'exemple, regardez la méthode projet ST_man_saveAsHTML (lignes de projet 51- 54):
$manPath_t
:=
ST_comm_executeCommand (
"/bin/sh -c
\"
man -w "
+
$manPage_t
+
"
\"
"
;
Faux
)
$manPath_t
:=
Sous chaine
(
$manPath_t
;
1
;
Length(
$manPath_t
)-
1
)
ST_comm_executeCommand (
"/bin/sh -c
\"
groff -Thtml -man "
+
$manPath_t
+
" >"
+
$documentPath_t
+
"
\"
"
;
Faux
)
ST_comm_executeCommand (
"/bin/sh -c
\"
open '"
+
$documentPath_t
+
"'
\"
"
;
Faux
)
Vous noterez que dans chacun de ces appels /bin/sh est appelé avec une option -c suivi des commandes et les options que nous voulons exécuter entre guillemets. Ceci permet de faire exécuter la chaine entre guillemets par le Shell Bash. C'est une méthode simple qui contourne les problèmes qui peuvent surgir si vous essayez de passer une commande trop complexe directement par LANCER PROCESS EXTERNE.
Dans ce cas-ci la seule ligne qui était susceptible de poser des problèmes est l'appel au groff. Cependant, elle n'empêche pas d'exécuter explicitement des commandes dans le Shell Bash.
La première ligne appelle la commande Man avec l'option -W. Ceci indique à la commande Man de renvoyer le chemin du fichier qu'il montrerait si on l'invitait à montrer la page Man.
La prochaine ligne équilibre le retour à la ligne qui est ajouté quand l'appel est fait. La troisième ligne appelle l'utilitaire groff. L'option -Thtml indique au groff d'être dans le format HTML.
Le -Man dit au groff que c'est une page du Man qu'il formatera. Vient après le chemin au dossier qu'il devrait utiliser comme entrée, dans ce cas-ci le chemin à la page du Man qui a été recherchée précédemment. Le signe > est une instruction qui envoie la sortie à un fichier. Le dernier paramètre est le chemin du fichier à utiliser pour la sortie.
La dernière ligne ouvre le fichier dans l'application par défaut pour ce type de fichier, très probablement un navigateur.
Conclusion▲
Cet exemple vous a donné quelques idées sur la façon dont on peut incorporer les commandes intégrées disponibles sur chacune des plateformes. Il a vraiment seulement touché la surface sur les commandes disponibles, en particulier sur OS X.
En utilisant LANCER PROCESS EXTERNE, vous pouvez découvrir et changer l'environnement sur lequel votre application 4D est lancée.
Sur Mac OS X vous pouvez tirer profit des utilitaires tels que le groff et le curl (voir la note technique 4D-200603-08-FR), lancer Applescript en utilisant osascript (voir l'article Lancer un AppleScript), et beaucoup plus.
Sur Windows vous avez accès à toutes les commandes du DOS ainsi que la capacité de passer des « flags » aux exécutables qui les accepteront.
Pour apprendre plus au sujet de ce qui est disponible sur Mac OS X, voir la liste complète des pages du Man :
http://www.clindberg.org/projects/manopen.html
Sur le site d'Apple :
http://developer.apple.com/documentation/Darwin/Reference/ManPages/index.html
Mac OS X est basé sur BSD, certaines commandes sont propres à BSD et n'apparaissent pas dans les distributions Linux. Utilisez donc des recherches ciblées :
http://www.google.com/bsd
http://www.google.com/mac
iMan :
http://sourceforge.net/projects/iman-macosx/
Il existe peu d'aides en français :
http://www.zengeek.fr/unix/man/index.html
Certaines « man pages » ont été traduites en français.
http://dpobel.free.fr/man/html/index.php.
Une liste complète des commandes du DOS et comment les utiliser est disponible sur le site web de Microsoft :
Liste alphabétique des commandes
Vue d'ensemble de l'interface de commande
Description des fichiers du panneau de config. sous Windows XP
Télécharger l'exemple▲
Télécharger la base exemple.