Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

BASE DE REGISTRE WINDOWS: LECTURE ET ÉCRITURE


Information sur le tutorial

Catégorie :Base de registre Date de création : 29/06/2005 20:28:03 Vu : 13 771 fois

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

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!

signaler à un administrateur
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.

signaler à un administrateur
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

signaler à un administrateur
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

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,187 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.