www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Read registry keys recursively

reply TheDGuy <a.b gmail.com> writes:
Hello,
i am wondering what is wrong with my code:

import std.windows.registry;
import std.stdio;

void main(){
     Key lclM = Registry.localMachine();
     Key hrdw = lclM.getKey("HARDWARE");
     writeRegistryKeys(hrdw);
}

void writeRegistryKeys(Key k){
     foreach(Key key; k.keys){
         writeRegistryKeys(key.getKey(key.name()));
     }
     writeln(k.name());
}

i get: 
std.windows.registry.RegistryException std\windows\registry.d(511): Failed to
open requested key: "ACPI"

Even though there is a key called 'ACPI' under 
localmachine/hardware?
May 29 2016
parent reply Era Scarecrow <rtcvb32 yahoo.com> writes:
On Sunday, 29 May 2016 at 15:48:49 UTC, TheDGuy wrote:
 Hello,
 i am wondering what is wrong with my code:

 import std.windows.registry;
 import std.stdio;

 void main(){
     Key lclM = Registry.localMachine();
     Key hrdw = lclM.getKey("HARDWARE");
     writeRegistryKeys(hrdw);
 }

 void writeRegistryKeys(Key k){
     foreach(Key key; k.keys){
         writeRegistryKeys(key.getKey(key.name()));
     }
     writeln(k.name());
 }

 i get: 
 std.windows.registry.RegistryException std\windows\registry.d(511): Failed to
open requested key: "ACPI"

 Even though there is a key called 'ACPI' under 
 localmachine/hardware?
Well this was a fun thing to figure out. Geez... You have everything good except for one line.
         writeRegistryKeys(key.getKey(key.name()));
Let's translate that. Assume key = ACPI... SO... ACPI.getkey("ACPI") you should see the problem. Here's the correct line! writeRegistryKeys(k.getKey(key.name()));
May 29 2016
parent Era Scarecrow <rtcvb32 yahoo.com> writes:
On Sunday, 29 May 2016 at 16:46:34 UTC, Era Scarecrow wrote:
  you should see the problem. Here's the correct line!

           writeRegistryKeys(k.getKey(key.name()));
this just occurred to me i tried to keep to the example but i shouldn't have. Since you already have the inner key, just pass that and it works. Far more obvious what's going on now. writeRegistryKeys(key);
May 29 2016