Bonjour,

Je viens de coder une fonction pour savoir si la restauration du système est activée ou non. Sous Vista/W7 j'analyse la donnée de la valeur "RPSessionInterval".

Tout fonctionne parfaitement sur les OS 32bits (XP,Vista et W7).

Mais je n'arrive pas à accéder à la valeur "RPSessionInterval" dans un environnement 64bits (Vista et W7)

Voici le code que j'utilise :


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
function fInfoRestore(hRootKey:HKEY;sRegKey:string):boolean;
//===========================================================
// Information sur l'activation de la restauration du système
//===========================================================
var
   reg    : TRegistry;
   iValueRPSessionInterval : integer;
 
begin
  Result := True;
 
  //hRootkey := HKEY_LOCAL_MACHINE
  //sRegKey := "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore"
 
  With FormZHPDiag do begin
 
     //Registre
     reg    := TRegistry.Create;
 
     With reg do begin
        RootKey := hRootKey;
        OpenKey(sRegKey, false);
        Access := KEY_WOW64_64KEY or KEY_QUERY_VALUE;
     end;
 
     //ShowMessage('KEY_WOW64_64KEY :' + IntToStr(KEY_WOW64_64KEY));  = 256 (d) = 100 (H)
     //ShowMessage('KEY_QUERY_VALUE :' + IntToStr(KEY_QUERY_VALUE));  = 1
 
     if reg.ValueExists('RPSessionInterval') then begin
         Try
            iValueRPSessionInterval := reg.ReadInteger('RPSessionInterval');
         Except
            on eRegistryException do begin
                iValueRPSessionInterval := 9;
            end;
         end;
     end
     else begin
        iValueRPSessionInterval := 9;
        ShowMessage('RPSessionInterval non accessible');
     end;
 
  end;
 
   //Libère le registre
   reg.CloseKey;
   reg.Destroy; 
end;
Voilà si vous avez une idée sur la question, je vous en remercie par avance.

A bientôt...