samedi 29 mars 2003

Base de registre


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 programme

HKEY_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 utilisateurs

HKEY_USERS

Cette section contient toutes les préférences de tous les profils utilisateurs

HKEY_CURRENT_CONFIG

Cette section les informations sur le matériel du système
Nous 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