Arrêt ou redémarrage rapide de Windows (95/98 ou NT)

La procédure d'arrêt ou de redémarrage de Windows est un peu fastidieuse (et longue) :
Menu "Démarrer", item "Arrêter", puis choix dans la boite de dialogue "Arrêt de Windows",...
On peut accélérer ce processus en lançant une application particulière pour laquelel on aura créé un raccourci. Plusieurs méthodes existent :

1) Méthode Windows (de base)

Exemple : c:\windows\rundll  user.exe,ExitWindows
hand_right.gif (969 octets)il ne doit y avoir AUCUN espace de part et d'autre de la virgule.
Mais cette astuce ne fonctionne pas toujours, et rundll, qui semble plus conciliant, n'existe pas sous Windows NT.De plus, elle se limite à arrêter Windows, or on peut vouloir redémarrer complètement le PC, ou simplement fermer la session en cours.

2) Méthode JCB (1ère version : EXIT.DLL)

C'est pourquoi j'ai conçu une autre librairie 32 bits, nommée exit.dll, qui fonctionne aussi bien sous Windows 9x que Windows NT, et qui admet des paramètres, permettant de choisir le mode d'arrêt ou de redémarrage. Par ailleurs, sa taille est inférieure à 30 ko.
Elle peut être placée dans n'importe quel répertoire (p.ex. c:\util), et est également lancée à l'aide de rundll32. Elle se compose d'une seule fonction nommée exitwin.
La syntaxe de la commande (à placer dans un raccourci, un fichier batch, un programme) est la suivante :

rundll32.exe <répertoire_de_exit.dll>\exit.dll,exitwin <liste de paramètres>

avec :

<répertoire_de_exit.dll> par exemple c:\util
<liste de paramètres> Si cette liste est vide, il y a affichage d'une boite de dialogue rappelant les paramètres disponibles :
exit.jpg (18094 octets)
Si la liste n'est pas vide, les paramètres doivent être séparés les uns des autres par un ou plusieurs espaces :
par exemple : Reboot force ?
ou encore   : P

 

 

  • L'ordre des paramètres n'a pas d'importance
  • La présence du caractère ? entrainera l'affichage d'une boite de dialogue de confirmation :confirm.jpg (7081 octets)

Exemple récapitulatif :

c:\windows\rundll32.exe c:\util\exit.dll,exitwin reboot F

hand_right.gif (969 octets)Le PC redémarrera sans confirmation, avec fermeture éventuelle de toutes les applications, même celles qui ne répondent plus au système.

Cliquez ici pour télécharger (gratuitement) exit.dll ("zippé" en exit.zip)

3) Méthode JCB (2ème version : WINEXIT.EXE)

L'utilisation de rundll me plaisant modérément, surtout en raison de sa syntaxe peu pratique, j'ai conçu WINEXIT.EXE, un exécutable autonome, ayant des fonctionnalités identiques à EXIT.DLL. (j'ai changé le nom pour éviter des confusions de modules binaires)
C'est une application Windows en interface graphique. Au départ, je l'avais conçue en mode console, mais j'ai découvert que l'utilisation de la fonction ExitWindowsEx est INTERDITE sous Windows 9x en mode console (NT4 et Windows 2000 l'acceptent sans problème).

Le lancement de Winexit sans aucun paramètre affiche la fenêtre d'aide
Les paramètres sont les mêmes que pour exitwin.dll (logoff, poweroff, shutdown, force, reboot, ?)
La syntaxe de la commande (à placer dans un raccourci, un fichier batch, un programme) est la suivante :

winexit.exe <liste de paramètres>

Exemple récapitulatif :

d:\outils\winexit.exe reboot F

hand_right.gif (969 octets)Le PC redémarrera sans confirmation, avec fermeture éventuelle de toutes les applications, même celles qui ne répondent plus au système.

Cliquez ici pour télécharger (gratuitement) winexit.exe ("zippé" en winexit.zip)

La défragmentation des disques

Sur un disque, en plus de la création de fichiers (ajouts) on est généralement amené à supprimer, modifier, agrandir un ou plusieurs fichiers. Donc quand on veut écrire quelque chose sur un disque, à moins qu'il soit vierge ou que l'on n'ait JAMAIS effectué de suppressions de fichiers, on va copier les informations là où il y a de l'espace libre. Et comme cet espace peut provenir d'anciens fichiers supprimés, lesquels, à moins d'un très grand hasard, n'ont pas la même taille que le nouveau fichier, ce dernier va être en plusieurs morceaux.

Suivant les systèmes d'exploitation et les systèmes de fichiers, la défragmentation peut être opérée soit en continu (UNIX), soit ponctuellement (à la demande : DOS, Windows).

Et comme un bon dessin vaut mieux qu'un mauvais discours, je vais prendre un exemple :

Soit un disque vierge au départ, dans lequel :

On écrit 2 fichiers, A et B, de 1 ko chacun (pour faire simple)

<--------------------Le disque------------------>
AAAAAAAA BBBBBBBB ................................
1k 1k  

Puis on ajoute un fichier C, de 2 ko  
AAAAAAAA BBBBBBBB CCCCCCCCCCCCCCCC ................
1k 1k 2k  


On veut ensuite modifier A, et le passer à 1.5ko 
Or on voit qu'il n'y a pas assez de place, là où est A
2 possibilités : 
1) Déplacer TOUS les fichiers B, C derrière A, de 0.5 ko "vers la droite" 
AAAAAAAAAAAA BBBBBBBB CCCCCCCCCCCCCCCC ............
1.5k 1k 2k  
Opération TRÈS coûteuse en temps CPU et déplacement des têtes 
=> Inutilisée par la plupart des systèmes de fichiers.

2) Copier le "restant" du fichier derrière tous les autres, là où c'est libre : 
AAAAAAAA BBBBBBBB CCCCCCCCCCCCCCCC AAAA ...........
1k 1k 2k .5  

Opération devenue très classique, retenue par presque tous les systèmes de fichiers, en particulier les FAT. par contre : 

Et la fragmentation va se poursuivre : 

On supprime le fichier B 
AAAAAAAA ........ CCCCCCCCCCCCCCCC AAAA ............
1k 1k 2k .5  

On crée un fichier D de 2 ko 
Le système ne va pas le copier à la fin directement, il va commencer par regarder s'il n'y a pas de la place libre avant. C'est justement le cas ici, mais c'est insuffisant. On va obtenir ceci :
AAAAAAAA DDDDDDDD CCCCCCCCCCCCCCCC AAAA DDDDDDDD ....
1k 1k 2k .5 1k  

On ramène la taille de C à 0.5ko 
AAAAAAAA DDDDDDDD CCCC ............ AAAA DDDDDDDD ....
1k 1k .5 1.5k .5 1k  

On passe la taille de A à 2.5 ko
AAAAAAAA DDDDDDDD CCCC AAAAAAAA .... AAAA DDDDDDDD ....
1k 1k .5 1k .5 .5 1k  

On devine facilement la complexité de l'ensemble !!! 
De plus, si on prend le cas du fichier A, on se rend compte qu'il est en 3 zones, le début est au début du disque, puis la suite vers la fin du disque, et la fin du fichier est au milieu du disque, soit un désordre total!

Le défragmenteur va (p.ex.) commencer par supprimer tous les trous, en les déplaçant et les fusionnant à la fin du disque

AAAAAAAA DDDDDDDD CCCC AAAAAAAAAAAA DDDDDDDD ........
1k 1k .5 1.5k 1k  

Ensuite, il va prendre les fichiers un par un, voir s'ils sont en plusieurs morceaux, et si oui essayer de les réorganiser : 

  1. Calcul de la taille totale 
  2. Recherche d'une zone libre en un seul bloc de cette taille 
  3. Si elle existe, on déplace le fichier dans cette zone 
  4. Si elle n'existe pas, on déplace un ou plusieurs blocs suivants., 
  5. Et ainsi de suite 

Exemple : 

AAAAAAAA ........ CCCC AAAAAAAAAAAA DDDDDDDDDDDDDDDD ....
1k 1k .5 1.5k 2k .5
AAAAAAAA ............ AAAAAAAAAAAA DDDDDDDDDDDDDDDD CCCC
1k 1.5k 1.5k 2k .5
AAAAAAAAAAAAAAAAAAAA ............ DDDDDDDDDDDDDDDD CCCC
2.5k 1.5k 2k .5
AAAAAAAAAAAAAAAAAAAA DDDDDDDDDDDD ............ DDDD CCCC
2.5k 1.5k 1.5k .5 .5
AAAAAAAAAAAAAAAAAAAA DDDDDDDDDDDDDDDD ............ CCCC
2.5k 2k 1.5k .5
AAAAAAAAAAAAAAAAAAAA DDDDDDDDDDDDDDDD CCCC ........ CCCC
2.5k 2k .5 1k .5
AAAAAAAAAAAAAAAAAAAA DDDDDDDDDDDDDDDD CCCCCCCC ........
2.5k 2k 1k 1k

L'efficacité d'un défragmenteur repose sur l'algorithme utilisé. Certains peuvent décider de rechercher pour commencer les plus gros fichiers, ou au contraire les plus petits, de les déplacer temporairement juste à la fin des fichiers, ou à la fin du disque,... 
La défragmentation prendra aussi plus ou moins de temps suivant la place libre sur le disque : si la place est très faible, le défragmenteur va devoir s'y prendre à plusieurs reprises pour déplacer un fichier.

C'est pourquoi il y a intérêt à défragmenter TRÈS RÉGULIÈREMENT (personnellement, je le fais quotidiennement, vers 2h du matin, par programmation automatique), ainsi la défragmentation est rapide (puisqu'il n'y a pas grand chose à faire, et aussi parce qu'il n'y a pas besoin d'une grande zone libre temporaire)

Si on attend trop longtemps, il n'y aura plus assez de place libre temporairement à la fin du disque, et donc le défragmenteur va devoir "ruser" un nombre incalculable de fois! Et on a intérêt à défragmenter, car un fichier fragmenté sera beaucoup plus long à lire ou à écrire, vu que les têtes vont devoir se déplacer à la surface du disque.

Contrairement à une idée reçue (et alimentée au départ par Microsoft lui-même), NTFS, qui est pourtant un excellent système de fichiers, fragmente les fichiers.
La preuve : sous Windows 2000, un défragmenteur est désormais livré avec le système d'exploitation (une version "allégée" de DiskKeeper).
Pour ma part, j'utilise (sous NT4 et Windows 2000) "OO-Defrag" (http://www.oosoft.de/index-e.html)

En conclusion, les seuls cas où défragmenter ne sert à rien sont :
- Quand le disque est neuf
- Quand le disque vient d'être défragmenté! ;+)
- Quand on ne supprime JAMAIS rien sur un disque! ;+)

sommaireLes clefs fondamentales (les plus usitées)

Le tableau ci-dessous regroupe d'une façon synthétique les clefs les plus couramment utilisées sous Windows. Pour avoir plus de détails, veuillez consulter les liens associés.

Clefs

Abréviations utilisées:

Rôles

HKCR   HKEY_CLASSES_ROOT
HKLM  HKEY_LOCAL_MACHINE
HKCU  HKEY_CURRENT_USER
HKU  HKEY_USERS
HKCR\CLSID\ {20D04FE0-3AEA-1069-A2D8-08002B30309D}
{645FF040-5081-101B-9F08-00AA002F954E}
{208D2C60-3AEA-1069-A2D7-08002B30309D}
Icônes  Poste de travail
Corbeille
Voisinage réseau
HKCR\http\shell\open\command
HKCR\http\shell\open\ddeexec\Application
HKCR\http\DefaultIcon
Navigateur Internet par défaut
HKCU\Control Panel\Keyboard Verrouillage pavé numérique
HKLM\Network\Logon  Authentification via un serveur
HKLM\Software\Microsoft\Windows\CurrentVersion Dossier applications
HKLM\Software\Microsoft\Windows\CurrentVersion\Run Applications lancées au démarrage
HKLM\Software\Microsoft\Windows\CurrentVersion\Setup  Lecteur d'installation
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall Désinstallation d'applications
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon Autologon
HKLM\System\CurrentControlSet\Control\Keyboard Layouts\0000040C Verrouillage majuscules
HKU\.Default\Control Panel\Desktop Logo de connexion

sommaireClef des références d'applications en vue de leur désinstallation

Commentaires : Cette clef est utile à connaître. Elle permet de "nettoyer" la liste des applications, affichée dans le panneau de configuration, qui fait encore apparaître certaines applications alors qu'elles ont été supprimées directement sans passer par la procédure de désinstallation.

sommaireClefs des programmes à exécuter au démarrage de Windows :

hand_right.gif (969 octets)toutes ces clefs ne sont pas forcément présentes (cela dépend du système d'exploitation utilisé)
Commentaires : C'est souvent dans l'une de ces clefs  que se "cache" un exécutable plus ou moins indésirable lancé systématiquement au démarrage de Windows, alors qu'on a rien trouvé dans le groupe/dossier "Démarrage" ni dans le fichier "win.ini" (entrées "Load=" et "Run=").
C'est le cas par exemple du cheval de Troie "Back Orifice", dont le lancement est localisé (sous Windows 95/98) dans la clef :
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices

sommaireClef des informations de paramétrage "international" (format date, séparateur décimal,...)

Commentaires : Dans le cas de où l'on a besoin de changer rapidement ces paramètres (tests d'applications multilingues p.ex.), il est intéressant de sauvegarder cette clef dans un fichier .reg (p.ex. "langfr.reg"), puis de faire de même avec d'autres configurations (p.ex. "langen.reg"). Placer alors ces fichiers (ou leurs raccourcis) sur le bureau. Ensuite, un simple click sur l'un d'eux permet de basculer instantanément d'un paramétrage à un autre, sans devoir passer par le panneau de configuration.

Réafficher l'écran d'accueil au démarrage de Windows

La 1ère fois que Windows est lancé s'affiche une boite de dialogue "Le saviez-vous ?", que, généralement, on s'empresse de désactiver pour les fois suivantes ! Mais rien ne permet ensuite de rétablir cet affichage.
Pour cela, il suffit d'exécuter le programme welcome.exe, et de cocher la case "Afficher cet écran d'accueil au démarrage de Windows"

Pour information, la clef correspondante de la base de registres s'appelle
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Tips
entrée "Show", dont la valeur est :

Définition des dossiers "Program Files"et installation de Windows

Quand on veut installer une nouvelle application, Windows propose comme répertoire par défaut :
"c:\program files", "c:" étant la lettre de la partition contenant Windows.
Même si on peut parfaitement installer l'application n'importe où ailleurs, cela peut devenir fastidieux de modifier systématiquement cette proposition. On peut modifier le nom de ce répertoire par défaut, à l'aide de la clef :

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

dans laquelle l'entrée de type chaîne "ProgramFilesDir" contient le chemin par défaut.
Il suffit donc de le remplacer sa valeur par ce que l'on veut (par exemple, "E:\Mes programmes")

Dans cette clef on trouve également l'entrée de type chaîne "CommonFilesDir", utilisée par MS Office, Adobe, ... (qui est au départ égale à "c:\Program Files\Fichiers communs").
On peut la modifier de la même façon. 
Il peut y avoir plusieurs répertoires du style "Program Files" pour y stocker des applications, par contre il ne doit y avoir qu'un seul répertoire "...\fichiers communs", sinon il risque d'y avoir des problèmes!

Le répertoire d'installation de Windows est stocké dans :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup 

dans laquelle l'entrée de type chaîne "SourcePath" contient généralement la lettre du lecteur de CD ayant servi à installer Windows. Si on est amené à modifier la lettre affectée au lecteur de CD, il peut être pratique de modifier la valeur de cette entrée, en indiquant la nouvelle lettre du CD.
On peut aussi avoir été amené à recopier l'intégralité du CD de Windows dans un répertoire d'un disque dur (pour des questions d'autonomie et de souplesse de (ré)installation). Dans ce cas, l'entrée SourcePath contiendra le nom de ce répertoire.

Personnaliser le panneau de configuration "Système"

Ce qui suit n'a pas d'intérêt vital, mais permet de donner un peu de fantaisie à votre système !

La manipulation décrite permet d'afficher une image et des informations  personnalisées dans l'onglet "Général" du panneau de configuration "Système" : (ici sous Windows NT4 et Windows XP, mais tout ceci est valable également sous Windows 9x/ME et Windows 2000)

Quand on appuie sur le bouton "Informations de support technique", la boite de dialogue suivante s'affiche :

En fonction du système d'exploitation utilisé, il suffit de créer dans le répertoire :

  1. un fichier texte nommé oeminfo.ini , ayant la structure traditionnelle d'une fichier ".ini",
    constitué de 2 sections [General] et [Support Information] :

    Le nombre de lignes affichées dans la deuxième boite de dialogue n'est pas limité. Il suffit de définir autant de clefs "Linenn" qu'il y a effectivement de lignes (lignes blanches comprises).

  1. un fichier image (format .bmp) nommé oemlogo.bmp
    Les caractéristiques de ce fichier ne sont pas critiques.
    Pour information, les dimensions de l'image de l'exemple ci-dessus sont de 180 sur 120 pixels.
    (ce "gros nounours" en plein effort me plait beaucoup! :+))

Impossible d'afficher l'onglet "Chercher" dans un fichier d'aide Windows

Après avoir lancé l'aide de Windows 9x ou Windows NT (menu Démarre), et essayé d'ouvrir l'onglet de recherche, on reçoit le message d'erreur suivant:

Impossible d'afficher l'onglet Chercher (177)

Comment remplacer un fichier en cours d'utilisation

On peut être amené à devoir remplacer un ou plusieurs fichiers (DLL, EXE, ...) alors qu'ils sont en cours d'utilisation, ce qui rend impossible toute manipulation habituelle (commande copy, opérations dans l'explorer,...). Il est existe néanmoins une méthode pour le faire, propre à chaque système d'exploitation.

Windows NT/2000

Il suffit d'utiliser dans un programme la fonction "MoveFileEx" (dans kernel32.dll), avec le commutateur MOVEFILE_DELAY_UNTIL_REBOOT. Cette fonction, une fois exécutée, se contente de modifier ou créer dans la clef :
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager
l'entrée PendingFileRenameOperation (de type REG_MULTI_SZ), laquelle va contenir les opérations à effectuer lors du redémarrage suivant.

Si la programmation en C rebute certains, il existe un tout petit utilitaire en mode console, FREEWARE, nommé "MOVEEX", disponible ici, qui fait cela très bien !

En voici la source :

Sa syntaxe est très simple :
Dans une fenêtre de commande (ou depuis le menu Démarrer/Exécuter), taper la commande suivante :

moveex <source> <destination>

Déplace (et renomme) <source> en <destination> l'opération ayant lieu lors du prochain redémarrage.

Fonctionne seulement sous Windows NT et avec des disques locaux! 
Avec des partitions NTFS, le compte SYSTEM doit avoir le droit 'Controle total' sur les fichiers en question! 

Exemples

moveex c:\temp\nouvelle_gina.dll c:\winnt\system32\nwgina.dll 

Déplace la librairie c:\temp\nouvelle_gina.dll dans le répertoire c:\winnt\system32 et la renomme en nwgina.dll .
S'il existe déja un fichier de ce nom dans c:\winnt\system32, il sera remplacé par le nouveau. 

moveex test.dll c:\temp 

Syntaxe incorrecte : La destination doit être un nom de fichier 

moveex c:\test.dll d:\test.dll 

Syntaxe incorrecte : On ne peut pas mélanger plusieurs disques

Pour annuler une opération de renommage avant que le système soit redémarré, i lsuffit de modifier ou supprimer l'entrée PendingFileRenameOperation dans la clef HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager

Téléchargement de "MOVEEX" :

Source (en C) (4 ko)
Exécutable (40 ko)

 

Windows 9x/ME

On ne peut pas utiliser la solution précédente, car la fonction "MoveFileEx" n'existe pas dans l'environnement Windows 9x/ME.
On va par contre se servir de WININIT, qui est un utilitaire système prévu pour cela. Ce programme, lancé au démarrage de Windows (avant chargement de l'interface graphique) vient lire le contenu du fichier wininit.ini (section "[rename]")
La syntaxe de chaque ligne de cette section est :
<nouvelle destination>=<origine>

Exemple :

[rename] 
NUL=C:\TEMP.TXT 
C:\NEW_DIR\EXISTING.TXT=C:\EXISTING.TXT 
C:\NEW_DIR\NEWNAME.TXT=C:\OLDNAME.TXT 
C:\EXISTING.TXT=C:\TEMP\NEWFILE.TXT 


La 1ère ligne entraîne la suppression de Temp.txt
La 2ème déplace Existing.txt vers un nouveau répertoire.
La 3ème déplace Oldname.txt vers le nouveau répertoire et le renomme.
La 4ème déplace et renomme Newfile.txt , qui va d'ailleurs écraser un fichier existant (Existing.txt)

Les applications ne doivent pas utiliser la fonction WritePrivateProfileString() pour écrire les entrée de la section [rename], car plusieurs lignes peuvent désigner la même destination  en particulier "NUL".

Une application qui utilise Wininit.ini doit vérifier son existence au préalable dans le répertoire de Windows. Si c'est le cas, cela signifie qu'une autre application en a eu besoin. S'il n'est pas trouvé, l'application devra le créer, ajouter la section [rename] et toutes les entrées nécessaires. 

Pour annuler une opération de renommage avant que le système soit redémarré, il suffit de supprimer la ou les lignes correspondantes dans le fichier wininit.ini.

Dates de fin de vie de produits Microsoft

Les produits Microsoft (Systèmes d'exploitation, logiciels bureautique,...) ont une durée de vie limitée. En particulier, à partir d'une certaine date plus aucun support n'est disponible. Voici une liste relative aux systèmes d'exploitation et principaux autres logiciels (d'après http://support.microsoft.com/DIRECTORY/DISCONTINUE.ASP) : 

Logiciel

Date de fin

Produit de remplacement

annoncée

réelle

DOS 1.x à 6.22 01/12/2000 31/12/2001 Windows 2000 Pro / ME
Win32s  01/05/2000 01/11/2000 Windows 2000 Pro / ME
Windows 1.x à 3.11 01/12/2000 31/12/2001 Windows 2000 Pro / ME
Windows 95  04/08/2000 31/12/2001 Windows 2000 Pro / ME
Windows 98 01/02/2001 30/06/2003 Windows 2000 Pro / ME
Windows 98 SE 01/02/2001 30/06/2003 Windows 2000 Pro / ME
Windows NT 4.0 Workstation 01/02/2001 30/06/2003 Windows 2000 Pro / ME
Site Server Entreprise 2.0 01/08/2000 01/02/2001 Site Server Commerce 3.0
Access 1.x 01/01/1999 01/07/1999 Access 2000
Access 2.x 01/05/2000 01/11/2000 Access 2000
Excel 4.x à 5.x 01/05/2000 01/11/2000 Excel 2000
PowerPoint 2.x à 4.x 01/05/2000 01/11/2000 PowerPoint 2000
Word 1.x 01/01/1999 01/07/1999 Word 2000
Word 2.x 01/05/2000 01/11/2000 Word 2000
FrontPage 1.x à 2.x 01/05/2000 01/11/2000 FrontPage 2000
Project 1.0 à 4.0 01/05/2000 01/11/2000 Project 2000
FoxPro 2.5 et 2.6 01/01/1999 01/07/1999 Visual FoxPro (6.0)
Internet Explorer 1.x à 2.x 01/12/2000 01/06/2001 IE 5.5
C/C++ 7.0 01/01/1999 01/07/1999 Visual C++ (6.0)
Quick C 01/01/1999 01/07/1999 Visual C++ (6.0)
Visual Basic 1.à à 3.0 01/01/1999 01/07/1999 Visual Basic (6.0)
Cobol 01/01/1999 01/07/1999 cf. produits tiers
Fortran 01/01/1999 01/07/1999 cf. produits tiers
MASM 6.0 01/01/1999 01/07/1999 cf. produits tiers
Pascal 01/01/1999 01/07/1999 cf. produits tiers

Modifications de la base de registres en ligne de commande

Il est peut s'avérer utile de modifier la base de registres en ligne de commande (et non pas via l'interface graphique de REGEDIT), cela essentiellement pour incorporer cette commande dans un fichier batch (.bat ou .cmd sous NT/W2K/XP), ou encore pour l'exécuter depuis un raccourci posé sur le bureau. 

Pour cela, il suffit de lui passer en paramètre à REGEDIT un fichier ayant l'extension .reg

La syntaxe est la suivante :


REGEDIT [/s] <nom_de_fichier.reg>
 

Le commutateur facultatif /s permet un fonctionnement en mode silencieux, c'est à dire sans apparition de la boite de dialogue de confirmation (ce mode est nécessaire dans le cas d'utilisation d'un fichier batch) :

Sous Windows 9x/ME/NT4, les fichiers .reg sont des fichiers texte de type ANSI (1 octet par caractère). 
 
Sous Windows 2000 et XP, ils sont, par défaut, de type UNICODE (2 octets par caractère), mais le type ANSI est également supporté. On retiendra ici le type ANSI traditionnel.

La première ligne du fichier est :

Type ANSI REGEDIT4
Type UNICODE Windows Registry Editor Version 5.00

Elle est suivie d'une ligne vide, puis des lignes propres à chaque clef à ajouter, modifier ou supprimer.

Pour ajouter ou modifier une clef :

On insère le nom complet de la clef, encadré par des crochets : [ et ].
Exemple :
REGEDIT4

[HKEY_CLASSES_ROOT\htmlfile\shell\open\command]

 

Pour ajouter ou modifier une entrée dans une clef :

On insère à la suite du nom de la clef une ligne de la forme :
<nom_de_l'entrée>=<valeur_de_l'entrée>
On encadre le nom de l'entrée par des guillemets " ", sauf si l'entrée concernée est l'entrée par défaut. Dans ce cas , le nom est symbolisé par le caractère @ (sans guillemets)
Exemple :
REGEDIT4

[HKEY_CLASSES_ROOT\.html]
@="htmlfile"
"Content Type"="text/html"

La valeur d'une entrée peut être de 3 types :

  • REG_SZ (chaîne de caractères)
    La chaîne doit être encadrée par des guillemets.
    Le caractère \ est un caractère d'échappement. C'est pourquoi il faut le doubler si on doit l'insérer dans la chaîne (cas fréquent quand la valeur est un nom de fichier). Ce caractère sert aussi à insérer des guillemets dans la chaîne. Ainsi un guillemet sera représenté par la séquence \" 
    Exemple :
    @="\"D:\\Program Files\\Internet Explorer\\iexplore.exe\" -nohome"

  • REG_DWORD (mot binaire de 4 octets)
    La valeur exprimée en hexadécimal doit être précédée du mot-clef dword suivi de 2 points :
    Exemple :
    "InstallDate"=dword:3a020c30

  • REG_BINARY (donnée binaire de longueur quelconque)
    La valeur est exprimée sous la forme d'une suite d'octets exprimés en hexadécimal, séparés par des virgules, le premier étant précédé du mot-clef hex suivi de deux points :
    Si la ligne est trop grande,
    on peut la couper à l'aide du caractère \, qui indique que la valeur se continue sur la ligne suivante.
    Exemple :
    "DigitalProductId"=hex:a4,00,00,00,03,00,00,00,35,32,33,34,30,2d,30,30,35,2d,\
    30,30,34,30,31,30,32,2d,30,35,34,30,31,00,0a,00,00,00,41,32,32,2d,30,30,30,\
    ...
    00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,43,19,d1,3a

  • Sous Windows NT/W2K/XP, les valeurs de type REG_EXPAND_SZ (chaîne contenant le nom d'une variable d'environnement) et REG_MULTI_SZ (plusieurs chaînes à la suite) doivent être exprimées sous la forme de valeurs binaires (hex:...) 

 

Pour supprimer une clef 

Il suffit de faire précéder le nom de la clef à supprimer du signe - (moins) 
Exemple : 
Suppression de la clef HKEY_LOCAL_MACHINE\SOFTWARE\jcb
REGEDIT4

[-HKEY_LOCAL_MACHINE\SOFTWARE\jcb]

 

Pour supprimer une entrée

Il suffit de faire suivre le signe "=" (après le nom de l'entrée) du signe - (moins) 
Exemple : 
Dans la clef HKey_Current_User\Software\Policies\Microsoft\Internet Explorer\Control Panel 
suppression de l'entrée de nom "Home Page
(pour information, c'est cette entrée qui interdit de modifier la page d'accueil de I.E.)
REGEDIT4 

[HKey_Current_User\Software\Policies\Microsoft\Internet Explorer\Control Panel]
"Home Page"=-

Pour renommer une clef

Rien n'est prévu pour le faire en ligne de commande.
Le seul moyen de base est d'effectuer cette opération depuis l'interface graphique de REGEDIT

Afin de pallier ce manque, j'ai conçu un utilitaire : RenameReg.exe

Renommage de clef dans la Base de registres
JCB © 2003
http://www.bellamyjc.net
-------------------------------------------
Syntaxe
  RenameReg <ancienne> <nouvelle>
Paramètres
  <ancienne> : Nom complet de la clef à renommer
  <nouvelle> : Nouveau nom de la clef à renommer (partie finale uniquement)
Dans le nom complet, les racines autorisées sont :
  HKEY_CLASSES_ROOT  (ou HKCR)
  HKEY_LOCAL_MACHINE (ou HKLM)
  HKEY_CURRENT_USER  (ou HKCU)
  HKEY_USERS         (ou HKU )

La clef à renommer doit exister
Le nouveau nom peut ne pas exister

Exemples :
----------
 RenameReg HKEY_LOCAL_MACHINE\software\test essai
  la clef "HKEY_LOCAL_MACHINE\software\test" sera renommée en
          "HKEY_LOCAL_MACHINE\software\essai"

 RenameReg HKCU\mykey ma clef
  la clef "HKEY_CURRENT_USER\mykey" sera renommée en
          "HKEY_CURRENT_USER\ma clef"


Télechargement de (48 ko - gratuit)
 

Un fichier .reg doit se terminer par une ligne vide.

Il est possible également d'exporter un fichier .reg depuis la base de registres à l'aide de REGEDIT en ligne de commande.
La syntaxe est la suivante :


REGEDIT [/e] <nom_de_fichier.reg> [clef_à_exporter]
 

Exemple :
Exportation du contenu de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet dans le fichier ccs.reg :


regedit /e css.reg HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
 

 

Structure des répertoires et stockage des noms longs avec le système FAT

Un répertoire est un fichier, constitué d'entrées de 32 octets chacune, servant à définir un fichier ou un autre répertoire. Au départ, un fichier était nommé à l'aide de 8+3 caractères, si bien que ces 32 octets étaient suffisants pour stocker le nom du fichier (11 octets), ses attributs ("D", "R", "H", "S", "A", sur 1 octet), sa taille (4 octets, ou 32 bits, donc valeur limitée à 2^32 octets), sa date de création (2 octets), le n° du 1er cluster (4 octets), ...

Avec l'arrivée des "noms longs", apparus avec Windows 95 (exception faite de Windows NT, utilisant un autre système), pouvant atteindre 255 caractères, il est évident que cette structure s'est avérée insuffisante, mais dans un but de compatibilité, il fallait aussi préserver l'ancien système.

On a donc, pour un fichier donné, la disposition suivante :

Données
nom court
Taille 
(octets)
Remarques
Nom de fichier
Extension 3
Attributs 1 N° de bit Signification
réservé
réservé
archive
4 sous-répertoire
nom de volume
fichier système
fichier caché
0 fichier lecture seule
Reservé 10 
Heure 2
Date 2
1er cluster 2
Taille 4
Total 32
Données
nom long
Taille 
(octets)
Remarques
N° d'entrée 1
Nom de fichier 10 UNICODE =5 caractères
Attributs 1 toujours 0x0F
Checksum 2
Suite nom 12 UNICODE =6 caractères
Réservé 2
Suite nom 4 UNICODE =2 caractères
Total 32

Une entrée de nom long peut donc contenir au maximum 5+6+2 =  13 caractères

Un nom long sera défini sous la forme de PLUSIEURS entrées supplémentaires, qui vont PRÉCÉDER l'entrée PRINCIPALE (= celle qui contient le nom court). 
L'ordre a énormément d'importance! 
En particulier, il ne faut surtout pas utiliser un outil de TRI de noms de fichiers dans un répertoire (je pense à l'antique "DS" - Directory Sort - des Norton Utilities des années 1985, qui était très pratique et rapide au demeurant!). Si on exécute un tel outil, c'est le désordre assuré dans le répertoire!

Par ailleurs, le nom long est exclusivement représenté en UNICODE (2 octets par caractère).
Le 1er octet de l'entrée indique le n° d'ordre de l'entrée (0x01, 0x02, ...), la dernière entrée se voyant le bit 6 mis à 1 (p.ex. 0x42 au lieu de 0x02)

Exemple : 
Soit le fichier de nom : "La connaissance s'accroit quand on la partage.txt
49 caractères au total => il faudra 4 entrées de nom long, 52=4x13 étant l'entier multiple de 13 immédiatement supérieur à 49.

Windows a déterminé comme nom court : "LACONN~1.TXT
Pour cela, il prend les 6 1ers caractères en éliminant tout ce qui n'est pas lettre ou chiffre (espace p.ex.), convertit en majuscule, ajoute le caractère tilde "~" , puis un chiffre (en fonction de ce qui existe déjà comme nom de fichier), et enfin rajoute la dernière extension (si elle existe)

Dans le répertoire contenant ce fichier, on trouve ceci :

00000100 44 61 00 72 00 74 00 61 00 67 00 0F 00 8C 65 00 Da.r.t.a.g....e. 
00000110 2E 00 74 00 78 00 74 00 00 00 00 00 FF FF FF FF ..t.x.t.........
00000120 03 71 00 75 00 61 00 6E 00 64 00 0F 00 8C 20 00 .q.u.a.n.d.... . 
00000130 6F 00 6E 00 20 00 6C 00 61 00 00 00 20 00 70 00 o.n. .l.a... .p.
00000140 02 63 00 65 00 20 00 73 00 27 00 0F 00 8C 61 00 .c.e. .s.'....a. 
00000150 63 00 63 00 72 00 6F 00 69 00 00 00 74 00 20 00 c.c.r.o.i...t. .
00000160 01 4C 00 61 00 20 00 63 00 6F 00 0F 00 8C 6E 00 .L.a. .c.o....n. 
00000170 6E 00 61 00 69 00 73 00 73 00 00 00 61 00 6E 00 n.a.i.s.s...a.n.
00000180 4C 41 43 4F 4E 4E 7E 31 54 58 54 20 00 27 25 8C LACONN~1TXT .'%. 
00000190 26 2A 26 2A 00 00 45 8C 26 2A FC 0A 33 00 00 00 &*&*..E.&*..3...

Il y a 5 entrées au total (4 entrées de nom long + 1 entrée de nom court) :

Commentaire personnel : on aurait pu faire plus simple !!!!! ;+)

Disquettes de test de configuration matérielle

Il existe (ou existait!) dans le CD de Windows NT4 deux outils entièrement autonomes (et très peu connus!) effectuant des tests de configuration matérielle (SCSI compris). Ils se présentent sous la forme de deux disquettes DOS 6.22 avec une version réduite de Windows 3.1.

Or ces outils n'ont pas été reconduits dans les versions postérieures de NT4 (2000, XP), et c'est fort dommage!

C'est pourquoi j'ai décidé de les mettre à disposition ici, sous la forme d'un fichier autoextractible hardtest.exe (2447 ko).  Il suffit d'exécuter ce programme (sous DOS, Windows 9X, NT, 2000, XP) puis d'exécuter le script MAKEDISK.BAT (son lancement est proposé automatiquement si la décompression de hardtest.exe a lieu sous Windows). Il faut prévoir 2 disquettes de 1.44Mo (formatées ou non, vierges ou non).

Ensuite il faut rebooter le PC avec l'une ou l'autre de ces disquettes, Windows 3 va alors se lancer, et les diagnostics vont se dérouler.

Cliquer ici pour télécharger hardtest.exe (2447 ko).

Verrouillage du pavé numérique (clavier externe de PC portable)

Il est possible d'adjoindre aux ordinateurs portables un pavé numérique externe (connecté généralement sur un port USB).

Cet accessoire est destiné à permettre une frappe rapide des touches numériques, au lieu de les chercher sur le clavier principal.
 

Touches du clavier principal
utilisées comme clavier
numérique
  Clavier
numérique
externe
 

Le problème rencontré avec ce système est que lors d'un verrouillage numérique, les touches du clavier principal sont également basculée en mode numérique. Ainsi il devient impossible (sans désactiver le verrouillage numérique) de saisir les caractères suivants :

U u I i O o P p
J j K k L l M m
? , / : § !  

Quelques constructeurs d'ordinateurs (Compaq, NEC) ont mis à disposition des utilitaires destinés à modifier ce comportement, mais ils fonctionnent mal et surtout sont liés à un type de matériel.

J'ai conçu un logiciel qui corrige cette anomalie : KNumLock.
Il fonctionne sous tout système Windows 32 bits (Windows 95,98, ME, NT4, 2000, XP)
(Il a été écrit sous Delphi 6)

Quand il est actif, il force le mode numérique uniquement sur le pavé numérique externe (sans avoir à actionner la touche de verrouillage numérique). Ainsi les touches U, I, O, P, J, K, L, M, ? , /, ! ..., sont toujours disponibles en tant que telles.

Son principe repose sur l'utilisation d'un "hook" de type WH_GETMESSAGE, qui intercepte (avant traitement par l'application destinataire) tous les messages claviers, et modifie en conséquence uniquement ceux provenant du pavé numérique externe, qui sont ensuite transmis à l'application.

Comme ce "hook" concerne toutes les applications en cours d'exécution, il est installé dans une bibliothèque distincte du logiciel lui-même (DLL "libmsg.dll")

KNUMLOCK apparaît sous la forme d'une icône dans le "System Tray" : 
Un clic droit sur l'icône fait apparaître un menu permettant de verrouiller ou déverrouiller le pavé numérique, ou encore de quitter le logiciel (dans ce dernier cas, le fonctionnement du verrouillage de clavier numérique redevient habituel).

KNUMLOCK ne nécessite aucun redémarrage, il est opérationnel dès qu'on l'exécute.
Son installation est réalisée automatiquement à partir d'un exécutable : instknl.exe

Aucune modification n'est effectuée dans la Base de Registres (sauf la clef pour sa désinstallation de l'ordinateur)
Aucun fichier (dll,..) n'est placé dans l'arborescence Windows.

Ce logiciel est entièrement gratuit

Cliquer ici pour télécharger INSTKNL.EXE (373 ko) (version bilingue français/anglais)


Je remercie au passage Michel Bardou et son site consacré à Delphi , en particulier son composant "PIconeBarreTache" dont je me suis servi dans mon logiciel.

Pour les développeurs : cliquer pour télécharger ici les sources du programme  (exécutable et DLL)

Changement du mode graphique par ligne de commande

On peut être amené à modifier le mode graphique (essentiellement la résolution horizontale et verticale) pour diverses raisons (application prévue pour une résolution donnée, exécution de jeux, ...)

Le problème est que cette simple opération nécessite l'utilisation de l'interface graphique (panneau de configuration affichage) ou au mieux l'action sur une icône placée dans le "System Tray" ("quickres" des Powertoys, utilitaire de certains fabricants de cartes graphiques,..), et donc ne peut pas être automatisée.

J'ai conçu "SETVIDEO", un outil en mode console, qui se lance donc en ligne de commande (depuis le menu Exécuter, dans une fenêtre de commandes, ou encore dans un fichier de commandes .bat ou .cmd)

La syntaxe est la suivante :

c:\>Setvideo
(sans paramètre)

Exemple :
Carte graphique Matrox Marvel G450 eTV - Français
134 modes graphiques disponibles :
8 bits 320 x 200 74 Hz
8 bits 320 x 200 85 Hz
8 bits 320 x 240 63 Hz
8 bits 320 x 240 85 Hz
...
32 bits 1152 x 864 85 Hz
...
32 bits 1280 x 1024 75 Hz
32 bits 1280 x 1024 85 Hz
32 bits 1600 x 1200 60 Hz
32 bits 1600 x 1200 65 Hz
32 bits 1600 x 1200 70 Hz

Affiche la liste de tous les modes graphiques disponibles de la carte graphique, avec pour chaque mode :
  • Nombre de bits par pixel
  • Résolution horizontale
  • Résolution verticale
  • Fréquence de rafraîchissement verticale

Cette liste est suivie d'une aide en ligne.

c:\>Setvideo x=aaaa y=bbbb b=cc f=dd

Exemple :
c:\>Setvideo x=1280 y=1024 b=32 f=85

Modification du mode graphique.
4 paramètres doivent être passés :
  • x=... résolution horizontale en pixels
  • y=... résolution verticale en pixels
  • b=... nombre de bits par pixels
  • f=... fréquence verticale en Hertz

Un contrôle de validité des paramètres est effectué. Si au moins l'un d'entre eux est manquant, ou si la configuration demandée n'est pas supportée par la carte, un message d'erreur sera affiché :

C:\>setvideo x=1024 y=768
paramètre b omis
paramètre f omis

C:\>setvideo x=1600 y=1200 b=32 f=85
Mode incompatible avec le matériel

S'il n'y a pas d'erreur, le nouveau mode graphique est immédiatement appliqué

Cet outil a été testé avec succès sous les systèmes d'exploitation suivants :

L'information de fréquence de rafraîchissement peut être inconsistante sous Windows 98 et ME, en affichant une valeur de 0 Hz. Cela correspond au taux de rafraîchissement par défaut de la carte graphique. Il faut néanmoins l'indiquer dans la commande de modification (setvideo x=1024 y=768 b=16 f=0).

SETVIDEO ne nécessite aucune installation. Il est autonome et directement opérationnel.

Ce logiciel est entièrement gratuit.

Cliquer ici pour télécharger SETVIDEO.EXE (134 ko)

(Il a été écrit en Delphi)