Bonjour,
Je développe une vaste DLL de fonctions de support pou run autre langage, en Delphi 6 Personal Edition, sous Windows 10 Edition familiale, dernière version, toutes mises à jour faites.

Je souhaite créer et maintenir des informations de configuration dans des clés de registre. Pour cela, je me suis servi d'un code publié ici:
https://www.swissdelphicenter.ch/en/showcode.php?id=301
Après de légères modifications "cosmétiques", voici mes codes:
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
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
interface
  uses
    Windows, Messages, Registry, Dialogs,
    KGF_unit_types
 
const
// constantes pour les clés registre spécifiques à KGF.dll (uniquement des clés "string")
//      Pour accéder à ces clés:
//         RegWrite(Registry_Key_xxx, Registry_Value_xxx_yyy, value);
//         value := RegRead((Registry_Key_xxx, Registry_Value_xxx_yyy);
//      avec:
//         xxx = module (OutlookInterface, ...)
//         yyy = valeur (DoRecoverMissedMails, ...)
 
//  Tous les paramètres liés à KGF.dll sont placés ici:
      Registry_RootKey = HKEY_LOCAL_MACHINE;
//  Toutes les clés de KGF.dll sont placées ici:
      Registry_Key = 'SOFTWARE\KGF\';
//  Clé pour OutlookInterface (unit KGF_unit_Outlook_2007.pas)
      Registry_Key_OutlookInterface = 'SOFTWARE\KGF\OutlookInterface\';
//  Les valeurs spécifiques pour OutlookInterface sont dans la clé OutlookInterface:
      Registry_Value_OutlookInterface_DoRecoverMissedMails = 'DoRecoverMissedMails';
      Registry_Value_OutlookInterface_LastCheckTime = 'LastCheckTime';
 
implementation
 
// les deux modules suivants viennent de https://www.swissdelphicenter.ch/en/showcode.php?id=301
function RegRead(Mykey, MyField: string): string;
var
  Reg: TRegistry;
begin
  //Create the Object
  result := '';
  Reg := TRegistry.Create;
  with Reg do begin
    //Sets the destination for our requests
    RootKey := HKEY_LOCAL_MACHINE;
    //Check if whe can open our key, if the key dosn't exist, we create it
    if OpenKey(MyKey, True) then begin
      //Is our field availabe
      if ValueExists(MyField) then
        //Read the value from the field
        Result := Readstring(MyField)
      else
        ShowMessage(MyField + ' does not exists under ' + MyKey);
    end else begin
      //There is a big error if we get an errormessage by
      //opening/creating the key
      ShowMessage('Error opening/creating key : ' + MyKey);
    end;
    CloseKey;
  end;
  Reg.Free;
end;
 
 
procedure RegWrite(Mykey, MyField, MyValue: string);
var
  Reg: TRegistry;
begin
  //Create the Object
  Reg := TRegistry.Create;
  with Reg do begin
    //Sets the destination for our requests
    RootKey := HKEY_LOCAL_MACHINE;
    //Check if we can open our key, if the key doesn't exist, we create it
    if OpenKey(MyKey, True) then begin
      //We don't need to check if the field is available because the
      //field is created by writing the value
      WriteString(MyField, MyValue);
    end else begin
      //There is a big error if we get an errormessage by
      //opening/creating the key
      ShowMessage('Error opening/creating key : ' + MyKey);
    end;
    CloseKey;
  end;
  Reg.Free;
end;
J'appelle ces fonctions comme suit:
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
 
var
  s: string;
 
// pour la lecture:
...
    s := RegRead(Registry_Key_OutlookInterface, Registry_Value_OutlookInterface_DoRecoverMissedMails);
...
    s := RegRead(Registry_Key_OutlookInterface, Registry_Value_OutlookInterface_LastCheckTime);
...
 
// pour la mise à jour:
...
    RegWrite(Registry_Key_OutlookInterface, Registry_Value_OutlookInterface_DoRecoverMissedMails, BoolToStr(POL.DoRecoverMissedMails));
    RegWrite(Registry_Key_OutlookInterface, Registry_Value_OutlookInterface_LastCheckTime,        FormatDateTime('yyyy/mm/dd hh:nn:ss',POL.LastTime));
...
Tout fonctionne parfaitement. Les informations sont mémorisées et réutilisables lors d'un démarrage ultérieur.

Mais, je ne comprends pas comment Windows construit l'arborescence des clés. Je voulais utiliser la ruche HKEY_LOCAL_MACHINE.
Dans cette ruche, je veux créer la clé SOFTWARE\KGF\OutlookInterface\ avec les valeurs DoRecoverMissedMails et LastCheckTime.
Or, voici ce qui est créé dans le registre:
Nom : aa1.png
Affichages : 276
Taille : 27,0 Ko
windows crée une arborescence dans une autre ruche, à savoir HKEY_CURRENT_USER. Voici le fichier *.reg extrait pour la clé créée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\KGF]
 
[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\KGF\OutlookInterface]
"DoRecoverMissedMails"="-1"
"LastCheckTime"="2021/02/25 15:41:11"
Question: comment la ruche est-elle choisie, et comment l'arborescence de la clé est-elle construite ?