BASE DE REGISTRE
La base de registre constitue le système nerveux de Windows. Une panoplie d'information y est entreposée. Il est possible d'intervenir sur le matériel, logiciel et sur le système d'exploitation grâce à la base de registre. Cette base de données peut aisément devenir énorme (des centaines de meg). Elle peut souvent rendre service, mais trop souvent elle est utilisée à tort. Il n'est pas rare de voir un programme qui y laisse sa trace même si le programme en question n'existe pu.La structure du registre
La base de registre est divisée en 5 sections- HKEY_CLASSES_ROOT
- HKEY_CURRENT_USER
- HKEY_LOCAL_MACHINE
- HKEY_USERS
- HKEY_CURRENT_CONFIG
HKEY_CLASSES_ROOT
Cette section permet de lier un type de fichier à un programmeHKEY_CURRENT_USER
Cette section contient tous les paramètres utilisateurs de celui qui est connectéHKEY_LOCAL_MACHINE
Cette section contient tous les paramètres du système relatif à tous les utilisateursHKEY_USERS
Cette section contient toutes les préférences de tous les profils utilisateursHKEY_CURRENT_CONFIG
Cette section les informations sur le matériel du systèmeNous avons vu les différentes sections de la base de registre. Il est bien attendu possible de lire et d'écrire dans ces sections.
Méthode
Il existe différentes méthodes disponibles dans Delphi permettant d'effectuer divers traitements dans la base de registre. L'unité «Registry» doit être ajoutée dans la section «uses» afin de pouvoir utiliser les méthodes liées à la base de registre.Exemple
Nous allons créer un petit programme qui créer une clé dans la base de registre qui dira au programme la couleur que la forme doit prendre.Lecture
Var Registre : TRegistry; tmpCouleur:integer; begin //Crée un objet TRegistry Registre:=TRegistry.Create; //Définit la clé principale Registre.RootKey:=HKEY_LOCAL_MACHINE; //Ouvre la clé et la crée si elle n'existe pas Registre.OpenKey('\Software\BorlandRulez\Test\',True); if Registre.ValueExists('Couleur') then begin tmpCouleur:=Registre.ReadInteger('Couleur'); ColorBox1.ItemIndex := tmpCouleur; form1.Color := ColorBox1.Colors[ColorBox1.ItemIndex]; end else begin showmessage('Veuillez écrire une valeur avant de pouvoir écrire'); Button1.Enabled := False; end; //Ferme la clé Registre.CloseKey; //Détruit l'objet Registre.Free; end;
Nous pouvons voir sur l'image ci-dessous l'effet qu'a la méthode «OpenKey» lorsque la clé n'existe pas. L'arborescence est crée. La clé Couleur fait partie de cette arborescence. Sa valeur est 23 (sa valeur en décimal est entre paranthèse)selon cette image.
Écriture
Var Registre : TRegistry; begin //Crée un objet TRegistry Registre:=TRegistry.Create; //Définit la clé principale Registre.RootKey:=HKEY_LOCAL_MACHINE; //Ouvre la clé et la crée si elle n'existe pas Registre.OpenKey('\Software\BorlandRulez\Test\',True); if ColorBox1.ItemIndex = -1 then ColorBox1.ItemIndex := 0; //Écrit la valeur Registre.WriteInteger('Couleur',ColorBox1.ItemIndex); //Ferme la clé Registre.CloseKey; //Détruit l'objet Registre.Free; end;
Suppression
Var Registre : TRegistry; begin //Crée un objet TRegistry Registre:=TRegistry.Create; //Définit la clé principale Registre.RootKey:=HKEY_LOCAL_MACHINE; //Ouvre la clé et la crée si elle n'existe pas Registre.OpenKey('\Software\BorlandRulez\Test\',True); //Écrit la valeur Registre.WriteInteger('Couleur',2); //Efface la valeur Registre.DeleteValue('Couleur'); Registre.CloseKey; //Détruit l'objet Registre.Free; end;
En exécutant ce code, la valeur 'Couleur' est enlevée de la base de registre. Il serait possible d'enlever la clé test en utilisant la méthode DeleteKey.
if Registre.KeyExists('\Software\BorlandRulez\Test\') then Registre.DeleteKey('\Software\BorlandRulez\Test\');
La méthode KeyExists permet de savoir si la clé existe, une telle méthode existe aussi pour les valeurs: ValueExists
Nous avons pu voir que la base de registre permet d'obtenir beaucoup d'information sur le matériel, logiciel et sur Windows. Il est aussi possible de l'utiliser afin de créer une configuration par défaut de notre programme. Elle peut alors remplacer l'utilisation des fichiers ini.
Code source disponible ici