开发者

How I can get a branch of registry recursively in builder c++?

Please, help anyone! I don't understand, how i could give a variable H_KEY type, it's want UnicodeString!

 TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
   reg->RootKey=HKEY_LOCAL_MACHINE;
   reg->OpenKey("",0);  //Открываем ключ
   TStringList *s=new TStringList;
   reg->GetValueNames(s);      // список параметров
  // ShowMessage(s->Text);
   for(int znach=0; znach<s->Count; znach++)
   {
       String a=s->Strings[znach];
       if(a=="Path" || a=="Directory")
       {
           ShowMessage("Parameter detected");
           // где-то тут функцию для проверки на существование в файловой системе
       }
     //  else  ShowMessage("Проверять нечего. Следующий параметр");
   }

   if(reg->HasSubKeys()==true)
   {
   TStringList *l=new TStringList;
   reg->GetKeyNames(l);        // список подключей
   ListBox1->Items->AddStrings(l);
   for(int ik=0;ik<l->Count;ik++)   // каждый подключ
   {
            TRegistry *reg1 = new TRegistry(KEY_ALL_ACCESS);
            TStringList *lol=new TStringList;
            reg1->RootKey=reg->RootKey;
            //reg1->OpenKey("",1);
            reg1->OpenKey(UnicodeString(l->Strings[ik]), 1);
            if(reg1->HasSubKeys()==true)           // если есть подключи
            {
                    reg1->GetKeyNames(lol);
               //       ListBox1->Items->Add("_______________"+UnicodeString(l->Strings[ik])+"_____________________");
                        ListBox1->Items->Add("_______________");
                    if(lol->Count>0)
                    {
                        for(int l1=0; l1<lol->Count; l1++)
                        {
                            ListBox1->Items->AddStrings(lol);      // добавляем все подключи
                            reg1->OpenKey(UnicodeString(lol->Strings[l1]),0);
                          //    reg1->OpenKey("",1);         // открываем текущий ключ
                            TStringList *l1=new TStringList;
                            reg1->GetValueNames(l1);   // получаем список параметров
                            if(l1->Count>0)
                            {
//                                  for(int kr=0;kr<l1->Count;kr++)        // перебирается список параметров
//                                  {
//                                       String zeze=reg1->ReadString(l1->ValueFromIndex[kr]);
//                                       ListBox1->Items->Add("_______________"+zeze+"_____________________");
//                                    //     ListBox1->Items->AddStrings(l1); //добавляются все параметры подключа
//                    开发者_运维问答              }
//                                  //  ShowMessage(l1->Count);
//                                  for(int k=0; k<s->Count; k++)
                                    {
                                       UnicodeString a=reg->ReadString("Path");
                                       UnicodeString b=reg->ReadString("Directory");
                                    }
                                }
                        }   reg1->CloseKey();
                    }
            }

   }
   delete reg;
   }


I've solved my problem. You can see code here:

void Recurse(UnicodeString currentpath)
    {
         // HKEY  all[]={HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG};
          TRegistry *reg=new TRegistry(KEY_ALL_ACCESS);
          TStringList *l=new TStringList;
          TStringList *s=new TStringList;
          TStringList *k=new TStringList;
          TStringList *k1=new TStringList;
          reg->RootKey=HKEY_LOCAL_MACHINE;
          UnicodeString bl=currentpath+"\\";
          reg->OpenKey(currentpath,0);
          reg->GetKeyNames(l);
         // Form1->ListBox1->Items->AddStrings(l);
          reg->GetValueNames(s);
          if(reg->HasSubKeys()==true || s>0)
          {
              for(int v=0;v<l->Count;v++)
              {
                  reg->OpenKey(bl+l->Strings[v],0);       //"\\"
                  reg->GetKeyNames(k);
                  for(int t=0; t<k->Count; t++)
                  {
                      reg->GetValueNames(k1);
                      for(int ze=0;ze<k1->Count;ze++)
                      {
                       if(reg->ValueExists("Path")|| reg->ValueExists("Directory")|| reg->ValueExists("path")|| reg->ValueExists("directory"))
                        {
                        String a=reg->ReadString("Path");
                        Form1->ListBox1->Items->Add(bl+l->Strings[v]+"\\"+k->Strings[t]+"\\"+k1->Strings[ze]+
                        "                                                        "+a);
                        Form1->Memo1->Lines->Add(a);
                        n++;
                        }
                  }
                  }
                  if(reg->HasSubKeys()==true)
                  {
                      Recurse(bl+l->Strings[v]);
                      reg->CloseKey();
                  }
              }
          }
          else ShowMessage("That's all");
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜