Alle Werte lesen



  • soll ich den Platzhalter etwa so schreiben:

    (regkey.ValueExists(...))
    

    so wenn das stimmt bleibt noch das problem mit der anzahl



  • muss mich hier echt mal anmelden das ich editieren kann.
    Also.
    Mit der Methode GetKeyNames müsste es ja gehen da muss ich mal ein wenig rumprobieren



  • TStrings *list=new TStringList();
    
    TRegistry& regkey=*new TRegistry();
    regkey.RootKey=HKEY_LOCAL_MACHINE;
    if(regkey.OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",false))
    { regkey.GetValueNames(list); }
    delete &regkey
    

    In list stehen dann alle Werte innerhalb des Schlüssels.
    Auf Die Werte kannst du z.B. so zugreifen:

    AnsiString blub=list->Strings[0];
    

    hf



  • kann mal einer die erste Zeile in meinem Beispiel richtig stellen und diesen Beitrag löschen? 😛
    thx



  • Halo

    Wenn schon vorsagen, dann aber richtig.

    TRegistry* regkey= new TRegistry();
    regkey->RootKey=HKEY_LOCAL_MACHINE;
    if(regkey->OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",false))
    { 
      TStrings *list=new TStringList();
      regkey->GetValueNames(list); 
    
      for (int lv = 0; lv < list->Count; lv++)
      {
        AnsiString subkeyname = list->Strings[Lv];
        ...
      }
      delete list;
      }
    delete regkey;
    

    /Edit : Semikolons korrigiert.

    bis bald
    akari



  • oh danke danke danke
    ihr seid echt genial.
    Ich muss mich hier echt anmelden.



  • Naja ok diese Zeile hier:
    for (int lv = 0; lv < list->Count; lv++)
    {
    AnsiString subkeyname = list->Strings[Lv];
    ...
    }

    ist überflüssig weil ich die Liste gleich so wie sie ist in eine ComboBox lade aber das konntet ihr ja nicht wissen.
    Und 2Semikolons bei den deletes(beiden) haben gefehlt 😉



  • OK Jetzt habe ich diesen Quelltext:

    TRegistry* regkey= new TRegistry();
    regkey->RootKey=HKEY_LOCAL_MACHINE;
    if(regkey->OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",false))
    {
      TStrings *list=new TStringList();
      regkey->GetValueNames(list);
    
      for (int lv = 0; lv < list->Count; lv++)
      {
        AnsiString subkeyname = list->Strings[lv];
        ComboBox1->Items=list;
        }
      delete list;
      }
    delete regkey;
    ComboBox1->Visible=true;
    

    Das funktioniert auch alles wunderbar.
    Aber jetzt will ich das man in der ComboBox etwas wählt und dann auf den Butten "Eintrag löschen" klickt.
    Daraufhin soll der entsprechende eintrag gelöscht werden.
    Aber dazu brauche ich unterschiedlich Stringnamen oder nicht?
    Ich habe auch schon dass:AnsiString subkeyname[lv] = list->Strings[lv]; versucht aber das funktioniert nicht.
    Wie bekomme ich es nun hin das ich unterschiedlich heißende strings habe?

    So geht es auch nicht: 😞
    int a=0;

    for (int lv = 0; lv < list->Count; lv++)
    {

    AnsiString subkeyname[a] = list->Strings[lv];
    a=a+1;
    ComboBox1->Items=list;
    }

    Wie dann? 😕



  • Wenn ihr auhc irgendetwas wisst wonach ich in der Hilfe suchen kann könnt ihr das gerne sagen.
    ICh weiß immer nicht nach was für befehlen(oder was auch immer) ich da suchn soll.



  • Hallo

    dann kannst du komplett die extra StringList weglassen

    regkey->GetValueNames(ComboBox1->Items);
    

    Aber dazu brauche ich unterschiedlich Stringnamen oder nicht?

    Warum? Du trägst doch die namen der Keys in Klartext ein. Also must du dir nur noch merken, wie der Basischlüssel heißt (in deinem Beispiel "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run") und kannst so den Gesamtschlüsselnamen zusammensetzen.

    bis bald
    akari



  • switch (ComboBox1->ItemIndex)
    {
    for (int a=0;a <= list->Count;a++);
    {
    case :
        TRegistry& regkey=*new TRegistry();
    	regkey.RootKey=HKEY_LOCAL_MACHINE;
    	bool keygood=regkey.OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",false);
    	regkey.LazyWrite=false;
    	if(keygood)
    		regkey.DeleteValue(ComboBox1->ItemIndex );
    	regkey.CloseKey();
    	delete &regkey;
        break;
        }
    }
    

    so weit bin ich nun bei meinem löschen-button
    Und ich weß nicht weiter 😞
    Ich muss den Case noch mitzählen lassen und den ItemIndex bei DeleteValue
    nur irgendwie bekomm ichs niicht hin 😞 😕



  • Was soll denn hier der switch sowie dir for-Schleife machen?
    Soweit ich das verstanden habe, willst du den key aus der Registry löschen, der in der ComboBox angezeigt wird.
    Dann vielleicht so

    TRegistry& regkey=*new TRegistry();
    regkey.RootKey=HKEY_LOCAL_MACHINE;
    bool keygood = regkey.OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",false);
    regkey.LazyWrite=false;
    if(keygood) regkey.DeleteValue(ComboBox1->Items->Strings[ComboBox1->ItemIndex]); //evtl. noch das Ergebnis aufheben
    regkey.CloseKey();
    delete &regkey;
    //dann noch den Eintrag aus der ComboBox löschen
    


  • ja ich wusste nicht das das so einfach auch geht...
    ich dachte das muss ich in eine schleife setzen und alles mitzählen lassen und per if (bei mir eben swich case) das dann löschen lassen.
    Naja wenns auch so einfach geht


Anmelden zum Antworten