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 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.