Une faq sur le langage
de scripts et les meilleures façons de
modifier le Registre Windows.
Dernière mise à jour : 22/11/2005
Windows Scripting
Host et le Registre
Modifier le Registre de tous les profils d'utilisateurs
Tweakomatic : Manipuler le Registre d'un ordinateur
distant
Windows
Scripting Host et le Registre
Windows Host scripting propose une collection d'objets COM vous
permettant d'utiliser les API Windows. Sous Windows XP, cette
plate-forme de programmation est livrée avec les deux moteurs
que sont Jscript et VBScript, ce dernier étant un sous-ensemble
des fonctions disponibles dans Visual Basic (VB). Les fichiers
écrits en VBScript porteront tous l'extension .vbs.
WHS offre deux interpréteurs que sont Wscript.exe et Csript.exe.
Bien que les différences soient ténues, un message
de sortie sera affiché différemment selon que vous
vous servez de Csript ou de son frère jumeau. Le script
doit créer un objet WshShell (qui représente le
Shell et vous donne donc accès aux outils de modification
du Registre).
Par défaut, il existe trois méthodes :
* RegDelete : permet de supprimer une donnée dans le Registre.
* RegRead : permet de lire une donnée dans le Registre.
* RegWrite : permet d'écrire une donnée dans le
Registre.
Les syntaxes sont les suivantes :
* WshShell.RegRead "Clé ou Valeur"
* WshShell.RegDelete "Clé ou Valeur"
* WshShell.RegWrite "Clé, Valeur, Données de
la valeur
La méthode RegRead lit la clé ou la valeur que vous
spécifiez avec l’argument correspondant. Chaque méthode
accède aux clés du registre d’après
le nom d’accès complet des clés. Vous pouvez
utiliser ces noms de clés prédéfinis :
* HKEY_CURRENT_USER (ou HKCU)
* HKEY_CLASSES_ROOT (ou HKCR)
* HKEY_LOCAL_MACHINE (ou HKLM)
* HKEY_USERS
* HKEY_CURRENT_CONFIG
La méthode RegWrite inscrit dans le Registre la sous-clé
ou la valeur que vous spécifiez. Si le nom du premier paramètre
se termine par une barre oblique inverse (\), RegWrite l'interprétera
comme une sous-clé. Sinon, RegWrite écrit l'argument
comme une valeur. Vous pouvez utiliser un argument optionnel pour
définir le type de la valeur :
* REG_SZ ou REG_EXPAND_ SZ écrit des valeurs de chaîne.
* REG_DWORD écrit une valeur entière 32 bits.
* REG_BINARY écrit une valeur binaire 32 bits.
1) Cliquez sur Démarrer/Exécuter puis saisissez
notepad
2) Saisissez le contenu de votre script.
3) Cliquez sur Fichier/Enregistrer.
4) Dans nom de fichier, saisissez ceci : test.vbs
Vous devez donc "écraser" la mention *.txt.
5) Avec le bouton droit de la souris, cliquez sur le fichier généré
puis sur la commande Modifier.
Information : Quand vous lancez un fichier de
script, il est normal que votre antivirus signale qu'un programme
tente d'écrire dans le Registre. Vous pouvez autoriser
exceptionnellement l'exécution du script ou, temporairement,
désactiver le blocage des scripts dans les paramètres
de configuration de votre antivirus.
Voici un premier exemple de script :
Dim WS, NoNetCrawling
Set WS = WScript.CreateObject("WScript.Shell")
NoNetCrawling = WS.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\NoNetCrawling")
if NoNetCrawling="0" then
WS.Popup "La recherche automatique des dossiers et des imprimantes
partagée est activée"
WS.Popup "Nous allons la désactiver"
WS.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\NoNetCrawling",
1, "REG_DWORD"
else
WS.Popup "La recherche automatique des dossiers et des imprimantes
partagée est déjà désactivée"
end if
La première ligne déclare les variables dont nous
allons nous servir : WS pour WshShell et NoNetCrawling pour le
contenu des données de la valeur du Registre NoNetCrawling.
Le choix des noms de variables est laissé à votre
convenance. Une variable est simplement une enveloppe à
laquelle nous attribuons un premier contenu puis, éventuellement,
d'autres contenus en fonction des besoins de notre script ou des
saisies de l'utilisateur. En bref, son contenu est susceptible
de varier. C'est la fonction interne Dim qui se charge de la déclaration
des variables.
La seconde ligne permet de créer l'objet afin de pouvoir
nous servir des méthodes proposées par Wscript.Shell.
La troisième ligne se contente de lire le contenu de la
valeur NoNetCrawling. Une fois ces données récupérées,
la variable NoNetCrawling équivaut à la valeur trouvée.
Nous posons alors une condition if - then.
Si les données de la valeur sont égales à
0, nous affichons deux boîtes de dialogue successives.
Nous écrivons, dans cette valeur DWORD, le chiffre 1 afin
d'activer cette stratégie.
Le contrôle Else permet de définir l'instruction
à lancer si la condition n'est pas remplie.
Nous devons terminer l'exécution de la condition par l'instruction
End if.
Rappelons que cette commande est accessible en mode d'interface
graphique en cliquant, dans l'Explorateur, sur Outils/Options
des dossiers/Affichage.
Voici d'autres exemples de scripts :
- Retrouver le Product ID de sa version de Windows :
Chaque Product ID correspond à une version déterminée
de Windows. Voici un script permettant de l'afficher :
Set WS = WScript.CreateObject("WScript.Shell")
Dim WS, e, a, b
e = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\"
b = ws.RegRead(p1 & "ProductId")
a = "Retrouver l'ID de votre version de Windows"
c = InputBox("Voici le Product ID de votre ordinateur",
a, b)
Nous définissons quatre variables personnalisées
nommées e, a, b et c.
* La première variable désigne l'arborescence du
Registre qui sera lue.
* La seconde, b, désigne les données de la valeur
contenue par la valeur chaîne ProductId.
Signalons que l'opérateur & permet de concaténer
les expressions et que cette instruction se lit de comme ceci
: ws.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProductId")
* La variable c permet de créer une boîte de dialogue
en utilisant la fonction interne Inputbox.
* Les variables a et b permettent de définir le titre et
le résultat de la commande ws.RegRead
- Changer le son associé aux erreurs Windows :
Cette fois-ci, nous allons modifier une valeur chaîne en
proposant à l'utilisateur de spécifier lui-même
l'emplacement et le nom du fichier .wav indiqué. Voici
le contenu du script :
Set WS = WScript.CreateObject("WScript.Shell")
Dim WS, e, a, b
e = "HKLM\SOFTWARE\Microsoft\DrWatson\"
a = "Changer l'avertissement sonore"
b = InputBox("Saisissez l'emplacement et le nom du fichier
wave puis cliquez sur OK", a)
If b <> "" Then
ws.RegWrite e & "WaveFile", b
End If
Nous créons quatre variables nommées WS, e, a et
b.
* La variable e correspond à l'arborescence du Registre
qui sera modifiée.
* La variable a correspond au titre de notre fenêtre.
* La variable b correspond au contenu qui s'affichera.
* La fonction interne InputBox nous permet d'afficher une fenêtre
standard dont le titre sera équivalent à la variable
a.
Si l'utilisateur saisit quelque chose (en fait, si la variable
b a été renseignée par l'utilisateur et donc
qu'elle est différente de rien ("if b <> ""),
alors nous lançons l'instruction suivante : "Dans
le Registre écrit dans l'arborescence définie par
la variable e (HKLM\SOFTWARE\Microsoft\DrWatson) une valeur chaîne
nommée WaveFile avec, comme données, le contenu
de la variable b".
L'opérateur & permet de concaténer les différentes
valeurs d'une instruction. L'instruction de la dernière
ligne se traduit donc par ceci : ws.RegWrite "HKLM\SOFTWARE\Microsoft\DrWatson\WaveFile",
Fichier.wav
- Changer la couleur du texte sélectionné :
Voici une suggestion possible :
Set WS = WScript.CreateObject("WScript.Shell")
Dim WS, e, a, b, c, dialogue
e = "HKEY_CURRENT_USER\Control Panel\Colors\"
a = ws.RegRead(e & "HilightText")
b = "Changer les valeurs RVB"
c = InputBox("Saisissez vos nouvelles valeurs dans ce format
: 0 0 255", b, a)
If c <> "" Then
ws.RegWrite e & "HilightText", c
dialogue = MsgBox("Vous devez redémarrer pour que
les changements soient effectifs.", vbOKOnly,"Terminé")
End If
Le principe est identique au script précédent, à
la différence que nous utilisons une autre fonction interne
à VBScript, qui permettra l'affichage d'une boîte
de dialogue contenant un message d'avertissement. Le paramètre
vbOKOnly spécifie de n'afficher que le bouton OK. Notez
que les données par défaut sont celles-ci : 255
255 255.
- Forcer l'affichage de certaines extensions de fichier :
La présence de la valeur chaîne NeverShowExt empêche
l'affichage des extensions de certains fichiers. Le principe du
script est donc de supprimer cette valeur. La seule astuce consiste
à ajouter, en début du script, une instruction empêchant
VBScript d'afficher un message d'erreur si une entrée spécifiée
n'est pas trouvée dans le Registre.
On Error Resume
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegDelete "HKCR\DocShortcut\NeverShowExt"
WshShell.RegDelete "HKCR\InternetShortcut\NeverShowExt"
WshShell.RegDelete "HKCR\lnkfile\NeverShowExt"
WshShell.RegDelete "HKCR\piffile\NeverShowExt"
WshShell.RegDelete "HKCR\ShellScrap\NeverShowExt"
Dim Dialogue
Dialogue = MsgBox("Vous devez redémarrer afin que
les changements soient effectifs", vbOKOnly,"Terminé")
Vous pouvez revenir en arrière en vous aidant d'un autre
fichier de script construit en fonction de ce modèle :
WshShell.RegWrite "HKCR\lnkfile\NeverShowExt", "",
"REG_SZ"
- Désactiver l'aperçu des images et des télécopies
Windows :
Afin d'appliquer manuellement cette astuce, procédez comme
suit :
1) Ouvrez HKEY_CLASSES_ROOT\SystemFileAssociations\image\ShellEx\ContextMenuHandlers\ShellImagePreview.
2) Éditez la valeur chaîne (par défaut) et
supprimez son contenu.
Par défaut, celle-ci contient ceci comme données
: {e84fda7c-1d6a-45f6-b725-cb260c236066}
Voici donc une solution :
Dim WS, a, Dialogue, b, c, Titre
Set WS = WScript.CreateObject("WScript.Shell")
b = "HKEY_CLASSES_ROOT\SystemFileAssociations\image\ShellEx\ContextMenuHandlers\ShellImagePreview\"
c = "REG_SZ"
a = ""
WS.RegWrite b, a, c
Titre = "L'apperçu des images et des télécopies
Windows est maintenant désactivé" & vbCR
Titre = Titre & "Vous devez relancer votre session interactive"
& vbCR
Dialogue = MsgBox(Titre,4096,"Terminé")
La méthode consiste simplement à créer une
valeur chaîne vide. L'instruction WS.RegWrite b, a, c peut
donc se lire de cette façon : WS.RegWrite "HKEY_CLASSES_ROOT\SystemFileAssociations\image\ShellEx\ContextMenuHandlers\ShellImagePreview\",
"", "REG_SZ"
- Changer les icones affectées aux dossiers système
:
Si vous appliquez cette astuce manuellement, procédez comme
suit.
Voici pour l'icone des dossiers quand ils seront fermés
:
1) Ouvrez HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell
Icons.
2) Créez une valeur chaîne nommée 3
3) Éditez cette entrée puis saisissez, comme données
de la valeur, l'emplacement et le nom de votre fichier d'icone.
Voici pour l'icone des dossiers quand ils seront ouverts :
1) Créez une valeur chaîne nommée 4
2) Éditez cette entrée puis saisissez, comme données
de la valeur, l'emplacement et le nom de votre fichier d'icone.
Afin de revenir aux paramètres par défaut, supprimez
le contenu de ces deux valeurs chaîne.
Voici une autre solution possible :
Set WS = WScript.CreateObject("WScript.Shell")
Dim WS, b, a, e, d, c, item, dialogue, titre
a = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell
Icons\"
a = a & "3"
item = "REG_SZ"
b = ""
WS.RegWrite a, b, item
a = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell
Icons\"
a = a & "4"
item = "REG_SZ"
b = ""
WS.RegWrite a, b, item
e = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell
Icons\"
b = WS.RegRead(e & "3")
d = "Changer l'icône des dossiers"
c = InputBox("Inscrivez l'emplacement exact de votre fichier
.ico", d, b)
If c <> "" Then
WS.RegWrite e & "3", c
End If
e = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell
Icons\"
b = WS.RegRead(e & "4")
d = "Changer l'icône des dossiers ouverts"
c = InputBox("Inscrivez l'emplacement exact de votre fichier
.ico", d, b)
If c <> "" Then
WS.RegWrite e & "4", c
End If
titre = "Vous devez redémarrez votre ordinateur"
dialogue = MsgBox(titre,64,"Terminé")
Modifier le Registre
de tous les profils d'utilisateurs à l'exception de celui
sur lequel vous êtes connecté
1) Vous pouvez télécharger une archive ZIP à
partir de cette adresse : http://www.windowsitpro.com/windowsnt20002003faq/Article/ArticleID/48506/windowsnt20002003faq_48506.html
2) Décompressez l'archive puis éditez le fichier
.txt qui est présent.
Dans un souci de clarification ne laissez que, par exemple, ceci
entre les lignes ' The work portion. Change this to anything you
want to perform et ' End of the work portion :
objReg.GetStringValue HKEY_USERS, "TempHive\Software\Microsoft\Windows\CurrentVersion\Explorer",
"Logon User Name", userName
objReg.SetStringValue HKEY_USERS, "TempHive\Control Panel\Desktop"
, "Wallpaper", "c:\windows\web\wallpaper\Colline
verdoyante.bmp"
objReg.SetStringValue HKEY_USERS, "TempHive\Control Panel\Desktop"
, "WallpaperStyle", "2"
3) Enregistrez les changements puis changez l'extension du fichier
en .vbs.
4) Double-cliquez dessus afin de propager les modifications faites
dans le Registre à l'ensemble des utilisateurs déclarés
sur votre machine.
Bien entendu, rien ne vous empêche d'ajouter d'autres valeurs
à modifier. En toute logique, il est préférable
de procéder à des modifications à partir
du compte Administrateur ou de votre propre compte (si vous ne
souhaitez pas que ces modifications s'appliquent à vous-même).
Tweakomatic
: Manipuler le Registre d'un ordinateur distant
Microsoft a conçu cet outil comme étant un pendant
logique de Tweak-UI. Il vous permet de changer un certain nombre
de paramètres dans le Registre. Téléchargez
le fichier tweakomatic.EXE à partir de cette adresse :
www.microsoft.com/downloads/details.aspx?FamilyID=BD328D1E-6C01-4447-BD7C-C09646D722C8&displaylang=en.
Double-cliquez dessus afin de décompresser ces trois fichiers
: tweakomatic_readme.doc, tweakomatic.hta et tweakomatic.mdb.
Double-cliquez sur le fichier .hta. Le principe consiste à
générer puis à lancer automatiquement un
script en piochant les valeurs utiles dans la base de données
du fichier "Access". Prenons un exemple :
1) Dans la liste déroulante Select a manageable component
from this list, cliquez sur Windows settings.
2) Dans la liste déroulante Select a task category from
this list, sélectionnez Command windows settings.
3) Dans la liste déroulante Select an individual task from
this list, cliquez sur Enable command window QuickEdit mode.
Le script sera automatiquement généré dans
la rubrique Script for carrying out this task.
4) Cliquez sur le bouton Run Script.
Les paramètres du Registre seront immédiatement
modifiés.
Il vous est possible de spécifier le nom d'un ordinateur
distant en cliquant sur le bouton Set Computer Name.
Les boutons placés sous la rubrique Script for retrieving
the current task setting vous permettent de restaurer les paramètres
par défaut.
Le bouton Change Value vous permet de modifier la valeur qui est
insérée par défaut dans le script sélectionné.
Le bouton Master Script vous permet d'enregistrer un script en
ajoutant à celui-ci vos différents enregistrements.
Il vous est possible de définir d'autres rubriques en suivant
cette procédure :
1) Double-cliquez sur le fichier tweakomatic.mdb.
2) Ouvrez la table nommée Tweaks.
3) Saisissez les nouvelles entrées en remplissant chaque
champ de la table.
|
|