Programmation WScript

Programme de base


function alert(arg) {WScript.Echo(arg)}
alert ("Hello World!")

Application

Programme qui contient plusieurs .js: créer un .wsf (point d'entrée) et référencer dedans les .js

<job id="IncludeExample">
<script language="JScript" src="lib_fso.js"/>
<script language="JScript">

</script>
</job>

HTML Application (HTA)

Une application HTA est une page HTML standard mais dans laquelle on peut utiliser les objets wscript. Dans l'élément HEAD on peut définir un certain nombre de paramètres complémentaires.

<HTA:APPLICATION ID="oHTA" APPLICATIONNAME="Gestion de PGT" BORDER="yes" CAPTION="yes" ICON="../charte/favicon.ico" SHOWINTASKBAR="yes" SINGLEINSTANCE="yes" SYSMENU="yes" WINDOWSTATE="maximize">

On peut aussi appeler une page HTML dans le HTA par <IFRAME src="index.htm" application=yes width="100%" height=100%> sysMenu: boutons, Minimizer et Maximizer. border="none" : pas même de barre de titre scroll="no" : pas de barre de défilement. ID: permet d'appeler les éléments comme variable: par ex oHTA.windowState (mais aussi oHTA.commandLine = PATH du .hta) icon: Vous pouvez donner le nom d'une applicationdu dossier Windows. Exemple : ICON="regedit.exe", ou ICON="notepad.exe", ICON="system32/winchat.exe", ou encore ICON="winhelp.exe" On peut aussi utiliser le protocole "res:" pour utiliser une ressource dll (exemple: ICON="res://C:\Documents and Settings\All Users\Dossier\madll.dll/monicone.ico"). NAVIGABLE="Yes" : par défaut, peut être source d'insécurité.

Différents types de scripts

Exécutable
run_helloworld.js
Glisser-déposer
dd_multiRename.js (parcours des arguments)
Glisser-déposer répertoire
ddd_multiRename.js
Exécutable
run_helloworld.js (lancement par double-clic)
Bibliothèque
lib_calculMatriciel.js
Filtre texte
filtre_calculMatriciel.js (stdin → stdout)

Interaction Homme Machine

WScript.Echo(chaine) //Si appel par cscript: sortie sur stdout, sinon comme WshShell.popup()

intButton = object.Popup(strText,[nSecondsToWait],[strTitle],[nType]) 
var WshShell = new ActiveXObject("WScript.Shell");
var BtnCode = WshShell.Popup("ça va?", 7, "Bienvenue", 3 + 32);


function alert(chaine) {WScript.Echo(chaine)}

function confirm(question) {
	var WshShell = new ActiveXObject("WScript.Shell");
	var BtnCode = WshShell.Popup(question, 10, "Confirmation", 1 + 32);
	if (BtnCode==1) return true;
	else return false;
}

StdIn StdOut (filtre texte)

//Sortir par ^C

var stdin   = WScript.StdIn;
var stdout  = WScript.StdOut;

while (! stdin.AtEndOfStream) {
   Line = stdin.ReadLine()
   stdout.WriteLine (Line.toUpperCase())
}
Remarque, on peut éviter la lecture ligne par ligne avec: input = stdin.ReadAll()

Appel par: cscript //nologo filtre_test.js <monFlot

Arguments (glisser déposer)

args = WScript.Arguments;
WScript.Echo(args.length);

for (var i=0;i<args.length ;i++)
{
	WScript.Echo (WScript.Arguments.Unnamed(i))
}

fileSystemObject

exemple fileSystemObject
var fso = new ActiveXObject("Scripting.FileSystemObject");


function sauver(p_nomFichier,p_contenu) {
	var a = fso.OpenTextFile(p_nomFichier,2 ,true);
	//1=r,2=w,8=a -1=UCS	
	//true: écraser
	a.WriteLine(p_contenu);
	a.Close();
}


function charger(p_nomFichier) {
	var a = fso.OpenTextFile(p_nomFichier,1,false);
	retour=a.ReadAll();
	a.Close();
	return retour;
}


function renommerHtml(p_repertoire) {
	fso.CopyFile (p_repertoire+"*.html", p_repertoire+"*.htm");
}

function renommerPhp3(p_repertoire) {
	fso.CopyFile (p_repertoire+"*.php3", p_repertoire+"*.php");
}

Applications scriptables

Certaines applications (Word, Outlook, Enterprise Architect,...) sont scriptables, on peut par exemple utiliser le correcteur orthographique de Word dans des scripts.

Word = new ActiveXObject("Word.Application");

On a alors accès aux propriétés et méthodes de cet objet ActiveX.

La liste des classes d'un ActiveX avec leurs méthodes et propriétés est définie dans un .TLB ou un .OLB (ou .DLL) On peut les parcourir avec l'explorateur d'objets de visual Basic fourni avec les macros Word. Outils/Références.
Tous les TLB sont enregistrés sous leur CLSID dans la base de registre (HKCR/Typelib)

Lancer des commandes

var WshShell = new ActiveXObject("WScript.Shell");
 WshShell.Run("calc",1); //2ème argument optionnel avec valeur 1 = activer
 //WshShell.AppActivate("Calculator");
 WScript.Sleep(200);
 WshShell.SendKeys ("1{+}"); //{} pour entourer caractère spécial
 WScript.Sleep(500);
 WshShell.SendKeys("2");
 WScript.Sleep(500);
 WshShell.SendKeys("~"); // Touche "Entrée" 

 //Combinaisons: entourer par () 
 //SHIFT: + ,CTRL: ^ ,ALT: % , ENTER: ~
 // {UP} {F12} {ESC},..

// Ouvre le script courant dans Notepad
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("%windir%\\notepad " + WScript.ScriptFullName,1);
WScript.Sleep(200);

WshShell.SendKeys ("^{END}~// (+s)alut~^f"); 
//Ajoute une ligne à la fin et ouvre boite de dialogue rechercher

Autre exemple:

var WshShell = new ActiveXObject("WScript.Shell");
var oExec = WshShell.Exec("calc");

while (oExec.Status == 0)
{
     WScript.Sleep(100);
}

WScript.Echo(oExec.Status);

CSCRIPT

Taper cscript sans argument pour avoir la liste des options. Les options de l'environnement d'exécution sont toujours précédées de deux barres obliques (//). Les arguments du script sont toujours précédés d'une simple barre oblique (/).

Objets prédéfinis

WshArguments
Accéder à la totalité du jeu d'arguments de ligne de commande,
WshNamed
seulement les arguments nommés,
WshUnnamed
seulement les arguments non nommés
WshNetwork
Se connecter aux partages et imprimantes réseau et s'en déconnecter, Établir une liaison avec les partages réseau et s'en déconnecter, Accéder aux informations sur l'utilisateur actuellement connecté,

WshController
Créer un processus de script distant à l'aide de la méthode Contrôleur CreateScript()
WshRemote
Administrer à distance les systèmes informatiques d'un réseau Programmer la manipulation d'autres programmes et scripts
WshRemoteError
Accéder aux informations d'erreur générées par l'interruption d'un script distant (objet WshRemote) à la suite d'une erreur de script
WshShell
Ligne de commande
WshShortcut
Programmer la création d'un raccourci
WshSpecialfolders
Accéder à tout dossier spécial Windows
WshURLShortcut
Programmer la création d'un raccourci vers une ressource Internet
WshEnvironment
Accéder à toute variable d'environnement, telle que WINDIR, PATH ou PROMPT on peut aussi untiliser %WINDIR%
WshScriptExec
Déterminer les informations d'état et d'erreur sur un script exécuté avec Exec()
Accéder aux canaux stdIn, stdOut et stdErr