Registry

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hallo!
    Könnte mir jemand die Nutzung von der Registry in C++ näher erläutern?
    Ich habe mir per Google beholfen, dabei bin ich z.B. auch auf diese FAQ gestoßen.
    Mein momentaner Code ist zum Schreien. Ohne if-Bedingungen oder ähnliches, Fehler gibt es auch noch.

    C:\Users\[User]\Desktop\Registry-Test\main.cpp||In function 'int main()':|
    C:\Users\[User]\Desktop\Registry-Test\main.cpp|13|error: invalid conversion from 'BYTE*' to 'const char*'|
    C:\Users\[User]\Desktop\Registry-Test\main.cpp|13|error: initializing argument 1 of 'size_t strlen(const char*)'|
    ||=== Build finished: 2 errors, 0 warnings ===|

    Mein Code:

    Quellcode

    1. #include <iostream>
    2. #include <Windows.h>
    3. using namespace std;
    4. int main() {
    5. HKEY hKey;
    6. HKEY hKey2;
    7. BYTE CString[]="Hallo, dies ist der Teststring für den Testschlüssel.";
    8. DWORD Zahl=56664;
    9. cout << "Schluessel 1 wird angelegt." << endl;
    10. RegCreateKeyEx(HKEY_CURRENT_USER, "Test", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, 0);
    11. cout << "Schluessel 2 wird angelegt." << endl;
    12. RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Test2", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey2, 0);
    13. cout << "Wert wird in Schluessel 1 geschrieben." << endl;
    14. RegSetValueEx(hKey, "Eintragsname", 0, REG_SZ, CString, strlen(CString)+1);
    15. cout << "Wert wird in Schluessel 2 geschrieben." << endl;
    16. RegSetValueEx(hKey2, "Eintragsname", 0, REG_DWORD, (BYTE*)&Zahl, sizeof(DWORD));
    17. cout << "Schluessel 1 wird geschlossen." << endl;
    18. RegCloseKey(hKey);
    19. cout << "Schluessel 2 wird geschlossen." << endl;
    20. RegCloseKey(hKey2);
    21. cout << "Ende" << endl;
    22. Sleep(5000);
    23. return(0);
    24. }
    Alles anzeigen

    Das wäre Programm 1. In Programm 2 würde er die Keys öffnen, den Inhalt in eine variable speichern und dann die Keys wieder schließen. Dann würde er damit irgendwas machen und die Keys löschen.

    Könnte mir jemand ein ausgiebiges Beispielprogramm zeigen?

    MfG
    Check
  • Cool danke!

    Und wie weiß man welche "Ebene" (ich nenne das jetzt mal so) man Nutzen soll?
    Also wann sollte man HKEY_CLASSES_ROOT, wann HKEY_CURRENT_USER, wann HKEY_LOCAL_MACHINE, wann HKEY_USERS und wann HKEY_CURRENT_CONFIG verwenden?
    Von HKEY_CURRENT_USER kann man es sich ableiten. - denke ich.
    Ich interpretiere das so, dass der momentane Nutzer, wir nennen ihn mal NutzerA, dieses Programm verwenden kann, da in seiner "Ebene" die notwendigen Keys sind.
    Also kann NutzerB nicht das Programm verwenden oder vollständig verwenden, was NutzerA jedoch kann.
    Bei HKEY_LOCAL_MACHINE haben NutzerA als auch NutzerB darauf Zugriff, oder?
    Doch bei dem anderem bin ich mir unsicher. Da ist die Spekulation zu groß, zu mal man nie spekulieren sollte. *g*

    MfG
    Check
  • Auf die Registry hast du als Programmierer eigentlich immer vollen bzw zum großen Teil Zugriff. (Ich glaub seit Vista ist es noch stärker an Rechte gebunden)

    In HKEY_USERS werden die Registryeinstellungen (nach UserID) aller Benutzer gespiechert, die Registry des aktuell eingelogten Benutzers wird zusätzlich auf HKEY_CURRENT_USER "gemappt" (gespiegelt).
    In HKEY_LOCAL_MACHINE werden die globallen Benutzereisntellungen gespiechert.

    In HKEY_CLASSES_ROOT und HKEY_CURRENT_CONFIG am besten gar nicht herumpfuschen, da sind Hardwareeinstellungen sowie Interfaceverknüpfungen und Einstellungen gespeichert.

    Um deine Einstellungen zu spiechern solltest du am besten die folgenden zwei Ordner verwenden (in diesen ein Unterordner erstellen, mit deinem "Namen"):
    HKEY_LOCAL_MACHINE\SOFTWARE
    HKEY_CURRENT_USER\Software

    Mfg Rushh0ur