Etude du script writeHTML.vbs
L'écran ci-dessus a été obtenu avec la ligne suivante :
c:\vbs>cscript/nologo writeHTML
"Ake <b>coucou</b>" "My Fancy Title" 800 400 -1 -1 yellow blue 4 1
Voyons maintenant de quoi il s'agit (dans tous les exemples, l'instruction
cscript/nologo a été omise car le moteur Cscript a été défini
par défaut à la place de Wscript sur notre machine).
Le script writeHTML a été conçu pour servir d'exemple afin de coder
une subroutine de gestion de pages HTML. Comme le montre l'exemple
ci-dessus, il peut être exécuté en une seule ligne (donc la subroutine
aussi).
Si la procédure ne reçoit pas tous les paramètres qu'elle requiert, ceux-ci
sont demandés lors d'un dialogue, comme ci-dessous :
c:\vbs>writeHTML
[parsing params]
Enter first line of text to display (<RET> =
end): test
Enter page title
(<RET> = no title):
Enter page width
(<RET> = 250):
Enter page heigth
(<RET> = 100):
Enter horizontal coordinate (-1 = centered, <RET> = 0):
Enter vertical coordinate (-1 = centered, <RET> = 0):
Enter background color
(<RET> = white):
Enter font color
(<RET> = black):
Enter font size
(<RET> = 3 (12 Pts)):
[checking nr of monitors]
** You have more than one monitor; Enter nr (<RET>=#1):
[getting resolution of monitor]
[creating 250 x 100 HTML window at location 0,0 on monitor #1]
[writing your line #1 to page]
[writing my line #2 to page]
[writing my line #3 to page]
[Publishing page]
** Press <RET> to close window:
[All done.]
c:\vbs>
Resultat :
On ne voit pas toutes les lignes dans l'exemple ci-dessus car la fenêtre est
trop petite en hauteur.
Si un paramètre est erroné, la procédure informe l'utilisateur et propose
une correction automatique si possible.
Exemple :
c:\vbs>writehtml 1 2 3 4 5 6 7 8
9 10
[parsing params]
** Invalid P7 parameter value: "7". Should be one of:
Black, White, Blue, Green, Yellow or Red (parameters are not case
sensitive).
c:\vbs>writehtml 1 2 3 4 5 6 red 8 9 10
[parsing params]
** Invalid P8 parameter value: "8". Should be one of:
Black, White, Blue, Green, Yellow or Red (parameters are not case
sensitive).
c:\vbs>writehtml 1 2 3 4 5 6 red blue 9 10
[parsing params]
** Page width has been changed to minimum value of 250.
** Page heigth has been changed to minimum value of 100.
[checking nr of monitors]
** Monitor nr has been changed to maximum value of 2.
[getting resolution of monitor]
[creating 250 x 100 HTML page at location -1045,6 on monitor #2]
[writing your line #1 to page]
[writing my line #2 to page]
[writing my line #3 to page]
[Publishing page]
** Press <RET> to close window:
Pour afficher l'aide, entrer la commande
c:\vbs>writehtml ? (ou /?)
Exemple :
c:\vbs>writehtml /?
This script allows to create/write/display some lines of text in an HTML
page.
Input : 9 mandatory parameters, 1
optional parameter (see below)
Output : Display within an Internet Explorer
page
Side effects: None
See detailed explanation of this script at
http://www.scripting-errors.com/writeHTML.htm
Syntax: writeHTML "text" PageTitle PageWidth PageHeigth X Y BgColor
FontColor FontSize [Monitor #]
where
P1 "text" = one line string to be displayed in
window
P2 PageTitle = window title (no default)
P3 PageWidth = window width size in pixels (default is minimum
is 250)
P4 PageHeigth = window heigth size in pixels (default is minimum is 100)
P5 X = upper left
corner horizontal position of window in pixels (default 0, -1=centered)
P6 Y = upper left
corner vertical position of window in pixels (default 0,
-1=centered)
P7 BgColor = window background color (default is white)
P8 FontColor = window text font color (default is black)
P9 FontSize = window text font size (default is 3
(12 Pts))
P10 Monitor # = Monitor number should computer config has more than one
monitor (default is #1)
c:\vbs>
Pour écrire dans une page HTML, il faut et il suffit de créer une instance
de Internet Explorer, ce qui ouvre une fenêtre (visible ou
invisible), puis d'y créer un objet page vide, puis d'écrire
dans cette page via ses méthodes, et enfin de la publier sur l'écran
(en rendant la fenêtre visible).
Il est nécessaire de bien comprendre la différence entre une fenêtre
et une page pour appréhender ce qui suit. Une fenêtre est
l'interface de communication entre Internet Explorer et
l'utilisateur. Elle a des caractéristiques telles que par exemple sa
position sur l'écran, sa taille, son titre et ce qu'elle va afficher dedans
: une page de texte. Celle-ci peut comporter du texte mais aussi des
images. Les caractéristiques d'une fenêtre sont principalement la couleur de
son fond, la couleur de son texte, la taille des caractères de son texte, le
style, etc. Dans une fenêtre, on peut afficher soit le contenu d'un fichier
existant, soit des lignes de texte que l'on écrit dans la page.
Etude détaillée du script writeHTML.vbs
Cliquer ici pour ouvrir
une nouvelle fenêtre et voir le source du script writeHTML.vbs avec
ses lignes numérotées.
Cliquer
là pour télécharger le
source (clic droit > enregistrer la cible du lien sous).
Ligne 52 Toutes les variables
doivent être dimensionnées.
Lignes 54 à 63 Déclaration des
variables et initialisation des constantes.
Lignes 65 à 74 Initialisation des
variables.
Lignes 76 à 86
Analyse de la ligne de commande.
Ligne 88
Chargement des variables de
travail P1 à P10 et exécution de quelques contrôles (voir plus loin).
Lignes 90 à 202
Traitement des paramètres P1 à P9.
Ligne 209 Récupération du nombre
de moniteurs connectés au PC.
Lignes 211 à 255
Calcul et gestion des paramètres d'affichage. La valeur
-1 pour x et y (lignes 239 et 249) signifie que la fenêtre d'affichage doit être centrée. Pour ce faire, il
faut connaître :
le numéro de l'écran où
ouvrir la fenêtre, si le
PC en a plus d'un
la position de l'écran si
c'est un écran secondaire (à droite ou à gauche)
la taille des écrans
la taille de la fenêtre à
afficher
Un peu de calcul permet d'obtenir
le résultat souhaité. En ce qui concerne la sélection d'un écran secondaire,
il suffit de choisir pour les coordonnées de l'angle supérieur gauche de la
fenêtre à afficher une valeur x supérieure d'au moins un pixel à celle de la
largeur de l'affichage de l'écran primaire. Une valeur positive si l'écran
secondaire est à droite de l'écran primaire, négative s'il est à gauche.
Exemple : Si l'écran primaire a une résolution de 1024 x 768 et que
l'écran secondaire est à droite, toute fenêtre affichée au point 1024,0
sera ajustée en haut à gauche de l'écran secondaire. Le point zéro d'un
écran est toujours en haut à gauche. Le positionnement d'une fenêtre se fait
toujours avec comme référence son coin supérieur gauche. Les valeurs de
x et y évoluent avec des
signes inverses. Dans notre exemple, x varie de 0 à 1023 et y de 0 à -767
mais le signe "-" n'est pas nécessaire et surtout ne doit pas être utilisé
car l'axe Y dans le plan d'un écran est orienté vers le bas (contrairement à
ce que l'on apprend lors de nos chers cours de géométrie au collège).
Si l'écran secondaire est à gauche de l'écran principal, son origine 0,0
est telle que : x = - <largeur de l'écran secondaire>.
Exemple : Si l'écran secondaire a une résolution de 1440 x 900, son
origine (son point zéro) par rapport à celle de l'écran primaire est située en -1440,0.
Dans le cas de la procédure que nous étudions ici, l'écran secondaire est à
gauche, et en plus il est défini en mode portrait (A4 vertical),
c'est-à-dire que l'affichage a été pivoté de 90° vers la gauche (l'écran
aussi, rassurez-vous). C'est pourquoi, lignes 243 et 253, on mélange un peu
les x et les y.
Relisez lentement ce qui précède. Vous verrez, à la troisième fois, vous
finirez par comprendre.
Ligne 259 Appel de la
subroutine de création de la fenêtre et de la page HTML (voir plus loin le détail du codage
de cette subroutine). Les paramètres à passer pour la création de la fenêtre
sont : le titre de la fenêtre, sa largeur, sa hauteur, ses coordonnées x
et y (angle
supérieur gauche) et la couleur du fond de la page qu'elle affichera. Le numéro du moniteur
n'apparait pas car il est déduit des coordonnées, comme on l'a compris (?)
précédemment.
Lignes 261 à 268 Appel de
la subroutine d'écriture dans la page (voir plus loin le détail du codage de cette
subroutine). Les paramètres à passer sont le texte, la couleur des
caractères du texte et la taille de ces caractères. Ligne 265, on voit que
l'on peut aussi passer les paramètres par valeur, et pas
obligatoirement par référence, comme à la ligne 262.
Lignes 271 et 272 Appel de la
subroutine de clôture de la page HTML (voir plus loin le détail du codage de
cette subroutine) et affichage de la fenêtre par modification de sa propriété
objExplorer.Visible.
Lignes 277 à 279 Si la fenêtre de
l'instance d'Internet Explorer a été fermée manuellement (croix rouge en
haut à droite de la fenêtre), la méthode objExplorer.quit va générer
une erreur 462, "Objet inexistant ou non disponible". Pour éviter que le
script ne s'arrête (comportement par défaut), on modifie la gestion des
erreurs (ligne 277) et on teste la valeur de la variable système
Err.Number, qui est renseignée automatiquement si une erreur est
survenue à la ligne précédente. Si l'erreur correspond à une tentative de
fermeture d'une fenêtre inexistante (erreur 462), on affiche un message
(élégant) et on termine le script. Pour connaître le numéro de cette erreur,
on avait codé initialement :
if Err.Number <> 0 then
wscript.echo Err.Number & " - " & Err.Description
462 - Le serveur distant n'existe
pas ou n'est pas disponible
Remarquer que le message d'erreur est erroné. Il devrait plutôt dire "L'objet
n'existe pas ou n'est pas disponible".
Lignes 285 à 312
Subroutine de changement de noms de variables qui ont reçu les paramètres de
la ligne de commande, s'il y en avait. Ce changement est réalisé pour
faciliter la programmation (manipuler une variable est plus simple que
manipuler une matrice, et plus facile à lire pour le debugging). Si
l'utilisateur entre "?" ou "/?" sur la ligne de commande, un texte d'aide
est affiché.
Lignes 315 à 323
Subroutine d'affichage d'une ligne d'aide.
Lignes 326 à 376
Subroutine d'affichage d'un texte d'aide détaillé.
Lignes 379 à 388
Subroutine de contrôle de la numéricité d'un paramètre.
Lignes 391 à 413
Subroutine de contrôle de la validité des paramètres "couleur".
Lignes 416 à 425
Subroutine de contrôle de la validité du paramètre "taille de caractère".
Lignes 428 à 448
Subroutine de lecture de la résolution du ou des écrans. La variable
MonitorNr est le nombre d'écrans trouvés ligne 209 (voir la fonction en
détails lignes 561 à 577).
lignes 451 à 509
Subroutine de création de la fenêtre Internet Explorer et d'une page
vide (ligne 461). Lignes 462 et 463 on définit des paramètres inaccessibles
à l'utilisateur. Ligne 464 on ne rend pas la fenêtre visible tant que la
page n'est pas remplie. Ensuite on définit les paramètres entrés par
l'utilisateur. Ligne 495 cette boucle est nécessaire pour attendre qu'Internet
Explorer ait fini de s'initialiser. Ligne 499 on crée l'instance d'Internet
Explorer, ligne 500 on ouvre la page (pour pouvoir écrire dedans).
Lignes 503 à 507 on construit le début de la page avec des données fixes et
la couleur du fond de page.
Lignes 512 à 547
Subroutine d'écriture dans la page
Lignes 550 à 558
Subroutine de clôture de la page.
Lignes 561 à 577
Fonction de lecture du nombre de moniteurs.
C'est à peu près tout. |