Tester l'existence d'une clé dans la base de registre
Bonjour à tous
J’ai trouvé ces routines qui fonctionnent à merveille, mais ce n’est pas tout à fait ce que je cherche :
Pour lire : Cette procédure serait à modifier
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Uses Registry;
procedure TForm1.Button1Click(Sender: TObject);
Var Registre : TRegistry;
begin
//Récupère l'url de la page de démarrage
Registre:=TRegistry.Create; //Crée un objet TRegistry
Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',False); {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
Edit1.Text:=Registre.ReadString('Start Page'); //Renvoie un string à partir du nom de la valeur
Registre.CloseKey; //Ferme la clé
Registre.Free; //Détruit l'objet
end; |
Pour écrire : Cette procédure me convient juste
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Uses Registry;
procedure TForm1.Button2Click(Sender: TObject);
Var Registre : TRegistry;
begin
//Modifie l'url de la page de démarrage
Registre:=TRegistry.Create; //Crée un objet TRegistry
Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',False);
{"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
Registre.WriteString('Start Page',Edit1.Text); //Stocke le contenu de Edit1 dans "Start Page"
Registre.CloseKey; //Ferme la clé
Registre.Free; //Détruit l'objet
end; |
Cela fonctionne bien, mais ce que je voudrais, c’est que dès que lance mon programme, on va vérifier si la clé existe.
Oui, on récupère la valeur
Non, on nous dirige vers la routine écrire.
Donc, ce que je cherche, de ne pas passer par TForm1.Button1Click(Sender: TObject);
J’ai vu qu’on peut utiliser KeyExists, mais je ne trouve pas la solution.
Merci pour votre aide.
Tester l'existence d'une clé dans la base de registre ( bis )
Bonjour.
Je reviens avec ma question de base de registre, merci à SergioMaster pour son aide mais après essai, ça fonctionne toujours pas.
Je mets l'ébauche de mon code source avec des explications à l'intérieur pour comprendre ce que je cherche.
JE vous remercie pour votre aide.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| unit Registre;
interface
uses
Windows, Messages, Registry, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Lire: TButton;
Ecrire: TButton;
Quitter: TButton;
Label1: TLabel;
existe: TButton;
procedure QuitterClick(Sender: TObject);
procedure LireClick(Sender: TObject);
procedure EcrireClick(Sender: TObject);
procedure existeClick(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
const
// clé du registre enregistrement et informations
root = HKEY_CURRENT_USER;
open = '\Zounar';
implementation
{$R *.dfm}
procedure TForm1.existeClick(Sender: TObject);
Var Registre : TRegistry;
// nouveau = si c'est une première utilisation,valeur ID clé=nouveau
nouveau : string;
{ cette routine s'evertue à enregistrer 'nouveau' dans ID clé alors
que j'ai mis la valeur b+a de la routine Ecrire.
je tourne en rond }
{ ce que je cherche en définitive, dès que je lance le programme, il execute la routine
existe sans passer par un bouton }
begin
nouveau :='nouveau';
Registre:=TRegistry.Create; //Crée un objet TRegistry
try
Registre.RootKey:=root; //Définit la clé principale
Registre.OpenKey(open,true); // force la création si besoin
if Registre.KeyExists('ID clé')
// pour contrôler la valeur ID clé et me l'afficher
then label1.caption:=Registre.ReadString('ID clé')
else Registre.WriteString('ID clé',nouveau);
label1.caption:=Registre.ReadString('ID clé');
Registre.CloseKey; //Ferme la clé
finally
Registre.Free; //Détruit l'objet
end;
end;
{ Ce que je cherche,c'est que si c'est la pemière utilisation on enregistre
nouveau dans ID clé et qu'aprèe, on m'envoye sur la routine Ecrire, autrement
on lance le programme normalement en utilisant la valeur ID clé. }
{ Normalemenet, ID clé doit avoir une valeur du genre : 123456789 }
procedure TForm1.LireClick(Sender: TObject);
Var Registre : TRegistry;
a : string;
begin
Registre:=TRegistry.Create; //Crée un objet TRegistry
Registre.RootKey:=root; //Définit la clé principale
Registre.OpenKey(open,False); {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
label1.caption:=Registre.ReadString('ID clé'); //Renvoie un string à partir du nom de la valeur
Registre.CloseKey; //Ferme la clé
Registre.Free; //Détruit l'objet
end;
procedure TForm1.EcrireClick(Sender: TObject);
Var Registre : TRegistry;
a, b : string;
begin
// a et b sont lé juste pour faire le test
b := 'abc-1234';
a:= b+'-48';
Registre:=TRegistry.Create; //Crée un objet TRegistry
Registre.RootKey:=root; //Définit la clé principale
Registre.OpenKey(open,True); {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
Registre.WriteString('ID clé',a);
Registre.CloseKey; //Ferme la clé
Registre.Free; //Détruit l'objet
end;
procedure TForm1.QuitterClick(Sender: TObject);
begin
Close;
end;
end. |
Merci, j'espère avoir été assez clair dans ma demande.