Auslesen der Registry geht nicht, warum?



  • CRegKey reg;
    	ULONG dwCount = sizeof(buffer);
    
    	reg.Attach(HKEY_CURRENT_USER);
    
    	if(reg.Open(category,key,KEY_READ) == ERROR_SUCCESS)
    	{
    		reg.QueryStringValue(buffer,item,&dwCount);
    		reg.Close();
    		if(!strcmp(buffer,"")) return true;
    		return true;
    	}
    	else return false;
    

    Dieser Code hat keine Wirkung, d.h. ich bekomme den Wert nicht geliefert. SAchreiben in die Registry darf und kann ich aber. Das hab ich getestet. Somit stimmen meine Zugriffsrechte.
    Findet jemand den Fehler in dem Code?

    Ich danke für jede Hilfe

    Ranger



  • Was ist category?



  • Entschuldigt, das hätte ich mir denken können. Sagen wir es müsste lauten:

    if(reg.Open(HKEY_CURRENT_USER,"Contol Panel\\International",KEY_READ) == ERROR_SUCCESS)
    	{
            }
    

    item ist ein char[50] der mit "" vorinitialisiert ist.

    Das komische ist, der Debugger zeigt mir gar kein Handle an, was in m_Key stehen müsste.

    Danke, war meine eigene Dummheit das nicht näher zu erläutern.



  • Mir kommt der reg.Attach seltsam vor. Ich habe den noch nie benutzt, obwohl ich auch schon öfters mit der Klasse gearbeitet habe 😕

    Ebenfalls kenne ich QueryStringValue nicht.
    Falls du eigentlich QueryValue meinst, dann ist der Aufruf falsch. Der zweite Parameter von QueryValue gibt nämlich den Wert an, den du auslesen willst. Wenn du hier also einen leeren String übergibst, dann wird der "(Standard)"-Eintrag ausgelesen, welcher - zumindest bei mir - nicht gesetzt ist.



  • if(reg.Open(HKEY_CURRENT_USER,"Contol Panel\\International",KEY_READ) == ERROR_SUCCESS)

    Empfehlung des Küchenchefs: Fehlercodes auswerten / Tracen

    #define LOCATION_(F,L) F " (" #L "): "
    #define LOCATION LOCATION_(__FILE__, __LINE__)
    
    DWORD result = reg.Open(...);
    if (result == ERROR_SUCCESS)
    {
       ...
      return true;
    }
    else
    {
      ATLTRACE(LOCATION " Error %Xh\n", result);
      return false;
    }
    


  • @ DEUs:

    Also das mit dem Attach hab ich auch rausgenomen, kam mir selbst wirklich spanisch vor. Ich hab jetzt auch nur QueryValue benutzt und es geht immernoch nicht. Natürlich ist item nicht leer sondern buffer. In item steht "sCountry", was den Landesnamen ausgeben sollte (nur als Beispiel), indem sich der Rechner befindet. Aber auch mit Deiner Lösung, die mir plausibel erscheint geht nichts.

    @ peterchen:

    Würde ich ja auch versuchen, wenn es fehlker geben würde. Er liefert ja Error_Success. Somit weis ich nicht was schief geht, da er mir vorgaukelt es ghet alles.

    Trotzdem soweit Dank an Euch beide.

    Ranger



  • Dann zeig mal etwas mehr Quellcode.
    Und was gibt QueryValue zurück?



  • Hier mal die ganze Funktion:

    bool GetKey(HKEY category,char * key,char * item, char * buffer)
    {
    	CRegKey reg;
    	long fehler;
    	ULONG dwCount = sizeof(buffer);
    
    	if(reg.Open(category,key,KEY_READ) == ERROR_SUCCESS)
    	{
    		fehler = reg.QueryValue(buffer,item,&dwCount);
    		reg.Close();
    		if(strcmp(buffer,"")) return true;
    		return false;
    	}
    	else return false;
    }
    

    fehler = 234 nach der Ausführung
    und dwCount = 12

    wenn es was nützt.



  • Puh, endlich geht das Forum wieder.
    Dein Problem ist, dass du dwCount = sizeof(buffer) machst. sizeof(buffer) ist aber immer 4, da es einfach ein Zeiger ist. Du musst also die Größe des Buffers extra noch an die Funktion übergeben



  • Aso, Danke für den Hinweis.

    Ranger


Log in to reply