Registry eintrag, problem mit Typenumwandlung?



  • hallöchen,
    ich habe da folgendes Problem: Ich habe eine Bool variable und möchte den Wert von dieser in einen Registy eintrag schreiben. Das Verzeichnis und den Registryschlüssel habe ich erfolgreich hinbekommen nur wird der Wert nicht wie gewünscht eingetragen sonder es wird gar kein Wert hineingeschrieben. Ich denke das das Problem beim Typenkonvertieren liegt. Kann mir da jemand helfen?

    RegCreateKeyExW(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Test\\test"), 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, 0);
    RegSetValueExW(hkey, _T("Clpbrd"), 0, REG_SZ, (BYTE *)(attitudes.SaveInClpbrd), 0);
    RegSetValueExW(hkey, _T("Protokoll"), 0, REG_SZ, (BYTE *)(attitudes.SaveInProtokoll), 0);
    			RegCloseKey(hkey);
    

    (die Elementevon der struktur sind die bool Werte und das ganze sollte unter UNICODE geschehen)



  • Einerseits musst Du die Adresse der betreffenden Variable angeben, welche dann nach BYTE* konvertiert wird und des weiteren frage ich mich, warum Du REG_SZ (also einen String) und keinen numerischen Typ nimmst 😕 ( ➡ REG_DWORD)?!

    PS: Falls Du UNICODE korrekt aktiviert hast, empfiehlt sich nicht explizit die Verwendung von RegSetValueExW sondern, des sich anpassenden Makros RegSetValueEx (ohne W oder A).



  • Wenn ich REG_DWORD nehme was muss ich dann expliziet anders machen ?(ich hab keine Ahnung wie man in die Registry schreibt das hab ich aus nem Tutor geklaut welches Ohne Unicode arbeitet und dann bei msdn mich mit meinem Englisch versucht und das ist dabei rausgekommen 😃 ) Und was meinst du genau mit Adresse der Variablen?? nen Zeiger darauf?



  • muss ich das so schreiben?

    RegSetValueExW(hkey, _T("Clpbrd"), 0, REG_DWORD, (BYTE *)(&attitudes.SaveInClpbrd), 0);
    RegSetValueExW(hkey, _T("Protokoll"), 0, REG_DWORD, (BYTE *)(&attitudes.SaveInProtokoll), 0);
    

    dann steht in der Registry (ungültiger DWORD Wert)



  • Du musst im letzten Parameter die Größe der übergebenen Daten angeben. Also zum Beispiel sizeof(attitudes.SaveInClpbrd) 😉 . Damit weiß die Funktion auch, wieviel sie reinschreiben muss.



  • Danke,das funktioniert wunderbar! Ich werde mich jetzt noch drangeben ide Werte wieder auszulesen. Ich glaube aber das schaff ich selber (sonst meld ich mich wieder) . Muss ich was beachten da es sich jetzt um DWORD Werte handelt?



  • Hobbyprogger schrieb:

    Muss ich was beachten da es sich jetzt um DWORD Werte handelt?

    Öhm, ja, mach nichts falsch 😃 ... ne also wüsste jetzt keine spezielle 'Stolperfalle' 😉 .



  • ich hab aber eine gefunden 😃 -> Mein Englisch !
    ich hab nicht wirklich ne Idee was die von Microsoft meinen was ich da als Parameter übergeben soll wenn Ich RegGetValue() benutzen will. 1. + 2. Parameter sind klar aber dann... könntest du mir einen Beispielcode für die Benutzung der Funktion schreiben?



  • * (damit mein ich kein Programm, sondern nur wie ich die Funktion richtig benutzen kann)





  • Vielen Dank für die Hilfe



  • * ich häte da noch eine "Frage" ich find im Moment den Fehler nicht.
    -> der Erste Aufruf von RegQueryValueEx ergibt als Wert für dwNumber 1 obwohl der Wert der gleiche in der Registry ist wie für TooltippTextColor. Der 2. Aufruf der Funktion dagegen gibt den Richtigen Wert für dwNumber zurück.

    [cpp]RegQueryValueExW(hKey,_T("TraductTextColor"),0,0,(BYTE*)&dwNumber,&dwData); // Eintrag TraductTextColor auslesen
    attitudes.TraductTextColor = dwNumber ;
    RegQueryValueExW(hKey,_T("TooltippTextColor"),0,0,(BYTE*)&dwNumber,&dwData); // Eintrag TooltippTextColor auslesen
    attitudes.TooltippColor = dwNumber ;
    cpp]



  • Ich habe jetzt festgestellt, dass der 1. Aufruf der Funktion garkeinen Wert zurückliefert



  • wenn ich die Funktion jetzt 2mal genau gleich aufrufe klappts. also so:

    RegQueryValueExW(hKey,_T("TraductTextColor"),0,0,(BYTE*)&dwNumber,&dwData);
    RegQueryValueExW(hKey,_T("TraductTextColor"),0,0,(BYTE*)&dwNumber,&dwData);
    RegQueryValueExW(hKey,_T("TooltippTextColor"),0,0,(BYTE*)&dwNumber,&dwData);
    

    -> dort klappt alles wie gewünscht aber der doppelte Aufruf kann doch nicht die Lösung sein. Habe ich wieder etwas falsch gemacht?? 😕


Anmelden zum Antworten