begin process at 2010 03 19 11:51:20
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Base de registre

 > BASE DE REGISTRE WINDOWS: LECTURE ET ÉCRITURE

BASE DE REGISTRE WINDOWS: LECTURE ET ÉCRITURE


 Information sur le tutoriel

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

 Description

Voici un tutorial sans grande prétention, mais qui peut certainement servir à tous ceux qui souhaiteraient manipuler la base de registre en Delphi et qui ne savent pas encore comment s'y prendre.

Tutorial

1) Qu'est-ce que la base de registre?

 On peut comparer la base de registre à un énorme fichier *.ini. Windows y répertorie toutes les informations qui lui sont nécessaires à la gestion et l'utilisation du matériel, comme du logiciel (hardware et software). La connaissance de la base permettra à ceux qui en ont l'ambition de pouvoir accéder à des paramètres cachés, ou tout simplement à réparer quelques lacunes de windows. Mais ce tutorial n'est pas fait pour apprendre les possibilités de la base de registre (manipulation avec des fichiers reg, définitions des clées => voir sur le net), mais pour découvrir les moyens que Delphi mais à notre disposition pour l'exploiter.

2) Organisation de la base de registre.

 La base de registre s'organise un peu comme un répertoire. Nous avons 5 répertoires principaux (ou ruches), de type HKEY. Viennent ensuite les sous-répertoires (ou clés et sous-clés). Ces derniers comportent ce que l'on appelle des valeurs, qui peuvent, elles, être de 5 types différents:
   - REG_BINARY :        valeur binaire
   - REG_DWORD :        valeur décimale ou hexadécimale
   - REG_EXPAND_SZ : valeur chaine (ou string)
   - REG_MULTI_SZ :    valeur chaine (ou string)
   - REG_SZ :                   valeur chaine (ou string)

Vous avez sans doute remarqué qu'il existe 3 sortes de valeurs qui ont le même format d'écriture. La subtilité de la chose et en fait beaucoup plus complexe qu'une ça, il est inutile de s'y attarder, ce serait un hors sujet!.

Voici concrétement un exemple de hiérarchie:

 

3) Les outils mis à disposition pas Delphi.

 Nous allons à présent découvrir l'utilisation de base avec Delphi. Pour commencer, il faut inclure l'unité Registry dans uses, sinon les fonctions utilisées ne seront pas trouvées lors de la compilation et donc, des erreurs seront générées.

 Nous utiliserons des fonctions de base suivantes:

TRegistry.Create :                                                               pour créer un objet TRegistry
RootKey :                                                                           pour définir la ruche (HKEY)
OpenKey('SousCle',Flag) :                                                  pour ouvrir la clé (ou sous-clé) et la créer ou non selon le Flag (voir plus bas)
WriteString('Valeur','Variable') :                                           pour écrire le contenu d'une valeur de type SZ, EXPAND_SZ ou MULTI_SZ 
WriteInteger('Valeur',Variable) :                                           pour écrire le contenu d'une valeur de type DWORD
WriteBinaryData('Valeur',Variable,taille de la variable) :        pour écrire le contenu d'une valeur de type BINARY
ReadString('Valeur') :                                                           pour lire le contenu d'une valeur de type SZ, EXPAND_SZ ou MULTI_SZ
CloseKey :                                                                          pour fermer la clé et/ou sous-clé
Free :                                                                                  pour libérer l'objet TRegistry créé

 
La méthode à suivre pour l'écriture est la suivant:

 - déclare Registry dans uses
dans la procédure utilisée:
 - déclarer un objet TRegistry
 - créer un objet TRegistry
 - définir la ruche (HKEY) avec RootKey
 - ouvrir la clé ou sous-clé avec OpenKey('SousCle',Flag). si Flag = True, la clé est créée si elle n'existe pas. Si Flag = False, la clé n'est pas créé si elle n'existe pas. Dans ce cas, prévoir la gestion des exceptions.
 - écrire dans la clé ouverte le contenu d'une valeur avec Write[type adéquat]. si la valeur existe déjà, elle sera réécrite. Si elle n'existe pas elle sera créée.
 - fermer la clé ouverte avec CloseKey
 - libérer l'objet TRegistry créé.

La façon la plus simple pour bien comprendre est l'exemple (ici écrire une valeur de type SZ, soit string):

procedure Button1Click(Sender: TObject);
var Registre : TRegistry;                                                               //déclaration de l'objet TRegistry
begin
Registre:=TRegistry.Create;                                                           //création de l'objet TRegistry, ici il s'appelle Registre
Registre.RootKey:=HKEY_CURRENT_USER;                           //définition de la ruche, ici HKEY_CURRENT_USER
Registre.OpenKey('\ceci est une clé\ceci est une sous clé',True);    //ouverture de la clé puis sous clé \ceci est une clé\ceci est une sous clé.
Registre.WriteString('ceci est une valeur','coucou');                       //écriture de coucou dans la valeur nommée ceci est une valeur
Registre.CloseKey;                                                                       //fermeture de la clé et sous clé
Registre.Free;                                                                               //libération de Registre
end;


Pour l'écriture, c'est le même principe, sauf qu'à la place d'utiliser Registre.WriteString, on prendra Registre.ReadString('ceci est une valeur') qui renverra un string.

Voilà, c'est fini pour les manipulations de base de la base de registre windows avec Delphi! Bien sûr, à vous d'adapter ensuite le type des valeurs (BINARY, DWORD...), le principe est le même.

Astuces:

- pour les DWORD, utilisez des integer, windows converti lui-même en hexa par la suite.
- pour les SZ, EXPAND_SZ et MULTI_SZ, un seul et même type: string. c'est l'interprétation de windows derrière qui les différencie (non expliqué dans ce tutorial).
- pour les BINARY, utilisez les array [0.....] of byte.

J'espère que tout ceci vous sera bien utile pour débuter avec la base de registre Windows!
A bientôt!

Commentaires

Commentaire de grandvizir le 17/08/2005 13:26:40

J'ai 5 remarques :

#1)
A la fin du tutorial, une chose est chagrinante:
begin
  Reg:=TRegistry.Create;
  Reg.[...];
  Reg.Free;
end;

Pour tout ce qui est objet, il faut libérer l'objet à coup sûr. On préfère donc la structure suivante, qui est marque de propreté selon l'aide de Delphi.
begin
  with TRegistry.Create do
    try
      WriteString(...);
      Variable:=ReadString(...);
    finally
      Free;
    end;
end;

#2)
Quand on ouvre une clé avec OpenKey, le dernier paramètre doit toujours être à FALSE. Car si tu mets TRUE, alors si la clé n'existe pas, elle sera créé. Il n'y aura rien dedans, ton programme récupèrera les valeurs par défaut que tu lui as donné, mais la clé ne sera pas supprimée à la fin. On appelle cela de la "pollution", et ce n'est guère apprécié. Tu as mis TRUE, car tu vas écrire dedans: je suis ok, y'a pas de pb !

#3)
En mettant FALSE, on a alors la structure suivante. Et il n'y a aucune exception à prévoir.
begin
  [...]
  if OpenKey('Clé',false) then
    begin
      [...Récupération des données (pas d'écriture, car on n'est pas sûr)...]
      CloseKey;
    end;
  [...]
end;

#4)
Enumérer les 7 HKEY_*, même si RegEdit n'en montre que 6.

#5)
Quand on supprime des clés, il faut le faire de la plus profonde à la plus superficielle, en accédant à toutes les clés. L'aide de Delphi annonce que le noyau NT est limite sur la suppression récursive si on fait appel à un noeud non vide. Sur ce détail, je n'en sais pas grand chose, mais il existe.

Commentaire de papson1987 le 11/01/2006 10:56:28

salut svp est ce ke vous pouvez aussi avoir des cours pour la gestion des registres mais cette fois ci bcp plus en java

Commentaire de Matt 261 le 01/03/2006 17:16:19

Vas voir du coté de [url]http://www.javafr.com/[url/] pour le Java (si ils parlent de la base de registre)

Matt

Commentaire de minoherison le 04/12/2009 09:13:45

J'espère que j'arriverais à bien manipuler la base de registres par cet tutoriel, je le trouve déjà satisfaisant. Merci!

 Ajouter un commentaire




Nos sponsors


Appels d'offres

Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,172 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales