IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

[TRegistry] Problème de RootKey


Sujet :

Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut [TRegistry] Problème de RootKey
    Bonjour,

    J'utilise le code suivant dans mon application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
         with Reg do
          begin
            TRegistry.Create;
            OpenKey('Software', True);
            OpenKey('JP''s', True);
            OpenKey('To100', True);
            if KeyExists('ColorNumbers') then
             begin
               ColorNumbers := Reg.ReadInteger('ColorNumbers');
               ColorEmptyBox := Reg.ReadInteger('ColorEmptyBox');
               ColorSelectedBox := Reg.ReadInteger('ColorSelectedBox');
               ColorPossibleBox := Reg.ReadInteger('ColorPossibleBox');
               ColorLatestBox := Reg.ReadInteger('ColorLatestBox');
               CloseKey;
               Destroy;
             end
            else
             begin
               ColorNumbers := clBlack;
               ColorEmptyBox := clWhite;
               ColorSelectedBox := clSilver;
               ColorPossibleBox := clNavy;
               ColorLatestBox := clGray;
               WriteInteger('ColorNumbers', ColorNumbers);
               WriteInteger('ColorEmptyBox', ColorEmptyBox);
               WriteInteger('ColorSelectedBox', ColorSelectedBox);
               WriteInteger('ColorPossibleBox', ColorPossibleBox);
               WriteInteger('ColorLatestBox', ColorLatestBox);
               CloseKey;
               Destroy;
             end;
          end;
    Puis, celui-ci (qui est identique dans la forme):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
         with Reg do
          begin
            TRegistry.Create;
            OpenKey('Software', True);
            OpenKey('JP''s', True);
            OpenKey('To100', True);
            WriteInteger('ColorNumbers', ColorNumbers);
            WriteInteger('ColorEmptyBox', ColorEmptyBox);
            WriteInteger('ColorSelectedBox', ColorSelectedBox);
            WriteInteger('ColorPossibleBox', ColorPossibleBox);
            WriteInteger('ColorLatestBox', ColorPossibleBox);
            CloseKey;
            Destroy;
          end;
    Ma variable Reg est privée à la fonction dans laquelle elle est applelée.

    Mon problème est que l'une des fonction va pointer sur HKEY_USERS\S-1-5-21-507921405-764733703-839522115-1153\Software\JP's\To100 et l'autre sur HKEY_CURRENT_USER\Software\JP's\To100.

    Le problème est donc que j'écris mes valeurs dans une clé et je les lis dans une autre qui a été écrite auparavant!!! (c'est pas très clair tout ça)

    Est-ce que l'un de vous aurait une idée pour que je puisse tout le temps pointer vers la même RootKey?

    Merci d'avance.

    Jérôme

  2. #2
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    D'une part, il ne faut pas utiliser le Destroy, il me semble, mais un Free.

    D'autre part, il y a la possibilité de préciser le RootKey

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse.

    J'ai mis Free à la place de Destroy, mais le résultat est le même...
    J'ai essayé de rajouter "RootKey := 0;", mais c'est déjà le cas, je le vois en faisant "ShowMessage(InttoStr(CurrentKey))".

    Mon problème est que l'une des fonction va pointer sur HKEY_USERS\S-1-5-21-507921405-764733703-839522115-1153\Software\JP's\To100 et l'autre sur HKEY_CURRENT_USER\Software\JP's\To100.
    J'ai fait le test... Si je supprime manuellement l'une des Clés, l'autre est supprimée automatiquement, par contre, à priori, elle n'est pas mise à jour.

    Avez vous plus de conseils, des idées?

    Merci

  4. #4
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    et avec (dans le with, après le create):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RootKey := HKEY_CURRENT_USER // (unité Windows)

  5. #5
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Je viens de relire!!

    En fait CurrentUser est une "copie" de l'utilisateur qui a ouvert la session (il me semble que c'est pour un fonctionnement plus simple)

    Donc en lien direct avec l'utilisateur correspondant à S-1-5-21-507921405-764733703-839522115-1153. Si tu fais un changement sur l'un forcément il sera répercuté sur l'autre.

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai trouvé d'où venait mon problème...
    Je suis trop bête en fait, c'est tout!

    Je me suis trompé dans le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if KeyExists('ColorNumbers') then
    'ColorNumbers' étant une valeur et non une clé, j'aurai dû mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ValueExists('ColorNumbers') then
    Là, ça marche!!!

    Merci quand même, ça me servira!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TRegistry] Problème de lancement au démarrage
    Par TOTO32 dans le forum Langage
    Réponses: 17
    Dernier message: 18/08/2005, 22h30
  2. Problème avec TRegistry et SaveKey...
    Par subsub dans le forum Composants VCL
    Réponses: 5
    Dernier message: 07/04/2003, 14h52
  3. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo