Die Registry



  • Also bei mir funktioniert sein Code - zumindest schreibt er was (Müll)! 😉
    Dies liegt aber daran, dass deine Schleife bei 0 beginnen muss und nur bis 1 laufen darf, da du ja auch nur zwei Stings in deinem Array hast!
    Außerdem fehlt nach der } des Arrays der Strichpunkt :p

    Da war wohl jemand schneller 😞

    [ Dieser Beitrag wurde am 16.01.2003 um 18:22 Uhr von flenders editiert. ]



  • @flenders: Macht nix, deine Erklärung ist dafür ausführlicher :)!

    cya 🙂



  • Ja ihr habt alle beide recht, er meint ja nur 2 Strings !? 🙄



  • dass mit den zwei elementen mit im array war nen beispiel
    komplet ist es so:

    char cSysString[26][30]={
        "Anzeige",
        "Automatische Updates",
        "Benutzer und Kennworter",
        "Datum/Uhrzeit",
        "Drucker",
        "EingabeHilfen",
        "Energieoptionen",
        "Geplante Vorgänge",
        "Hardware",
        "Internetoptionen",
        "Ländereinställungen",
        "Mail",
        "Maus",
        "Netzwerk- und DFÜ-Verbindung",
        "NVIDIA nView-Desktop-Manager",
        "Ordneroptionen",
        "Scanner und Kameras",
        "Schriftarten",
        "Software",
        "Sounds und Multimedia",
        "Spieloptionen",
        "Symantec LiveUpdate",
        "System",
        "Tastatur",
        "Telefon- und Modemoptionen",
        "Verwaltung"};
    

    da ich 26 elemente habe lass ich die schleife 26 mal durchlaufen...
    mit dem SHSetValue() funzt das auch nich...
    Der Compiler gibt zwar keine Fehlermeldung aber die einträge in der regis werden nicht erstellt

    Ich hab hier mal ne url, da steht was ich machen will
    [url] http://www.windows-tweaks.info/html/systemsteuerung2.html [/url]
    könnt ja mal reinschauen

    cu Laubi

    [ Dieser Beitrag wurde am 16.01.2003 um 18:48 Uhr von Laubfrosch editiert. ]



  • Sorry,

    aber auch Dein Link funzt nicht!



  • Bei mir funzt er...

    cya 🙂



  • jetzt auch bei mir. Und was willst Du nun machen, die Werte löschen oder wie ?



  • ich will die werte neu erstellen...
    also eine neue Zeichenfolge z.B soll die 1 heissen und den wert System annehmen.
    ich dachte das hätte ich hier schonmal erwähnt. wenn nicht dann mach ich es eben jetz nohmal..

    [ Dieser Beitrag wurde am 16.01.2003 um 19:14 Uhr von Laubfrosch editiert. ]



  • ich will die werte neu erstellen...

    Dann mach das doch. BigFusels Schnippsel ist doch auch schon fast richtig (bei der Größenangabe fehlt die abschließende 0). Außerdem hantiert Ihr alle mit vielen Zahlen rum. Ich würde das doch ein wenig anders machen:

    const char* cSysString[]=
    {
        "Anzeige",
        "Automatische Updates",
        "Benutzer und Kennworter",
        "Datum/Uhrzeit",
        "Drucker",
        "EingabeHilfen",
        "Energieoptionen",
        "Geplante Vorgänge",
        "Hardware",
        "Internetoptionen",
        "Ländereinställungen",
        "Mail",
        "Maus",
        "Netzwerk- und DFÜ-Verbindung",
        "NVIDIA nView-Desktop-Manager",
        "Ordneroptionen",
        "Scanner und Kameras",
        "Schriftarten",
        "Software",
        "Sounds und Multimedia",
        "Spieloptionen",
        "Symantec LiveUpdate",
        "System",
        "Tastatur",
        "Telefon- und Modemoptionen",
        "Verwaltung"
    }; 
    
    char szMyValue[] = "123";
    
    HKEY hKey;
    int  x;
    
      RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Test", NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
    
      for(x = 0; x < (sizeof(cSysString) / sizeof(cSysString[0])); ++x)
          RegSetValueEx(hKey, cSysString[x], 0, REG_SZ, (BYTE*)szMyValue, (strlen(szMyValue) + 1) * sizeof(szMyValue[0]));
    
      RegCloseKey(hKey);
    

    Das ist aber, wenn man Deinem Link glauben schenken darf, ein unmögliches Unterfangen. Man kann sich nicht einfach ein Programm schreiben, da man Bordmittel benutzen muß. Zitat von der Seite:

    Leider ist dies nicht ohne Windows 2000 Bordmitteln möglich.

    Dann verwende doch auch Bordmittel:
    Start -> Ausführen -> gpedit.msc

    Jetzt kannst Du unter
    Benutzerkonfiguration -> Administrative Vorlagen -> Systemsteuerung

    alles schöne verändern. Dazu mußt Du Dich lediglich als Administrator anmelden.

    SCNR



  • Du erstellst jetzt aber Schlüssel mit den Namen und weist ihnen den Wert "123" zu, die Name der Schlüssel sind aber eine fortlaufende Nummern, die Werte sind die Namen! 😉
    Aber wie gesagt: bei mir hat das ganze funktioniert!



  • Meine Güte, dann tausch es halt um. Wichtig ist, daß Du bei der Längenangabe nicht einfach strlen(xyz) schreibst. Du mußt die abschließende 0 mit einbeziehen. Aber wenn es Dich beruhigt, will ich das mal schnell noch machen (und BiGFusel wiederholen):

    RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Test", NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
    
      for(x = 0; x < (sizeof(cSysString) / sizeof(cSysString[0])); ++x)
      {
          wsprintf(szMyValue, "%u", x + 1);
          RegSetValueEx(hKey, szMyValue, 0, REG_SZ, (BYTE*)cSysString[x], (strlen(cSysString[x]) + 1) * sizeof(cSysString[x][0]));
      }
    
      RegCloseKey(hKey);
    


  • Wenn dem so ist, sollte man das vielleicht in den FAQ ändern, da steht das nämlich einfach mit strlen drin! 🙄

    Edit: Ich hab jetzt mal im PSDK nachgeschaut, da steht es auch mit strlen(xyz)+1 drin! 🙂

    [ Dieser Beitrag wurde am 16.01.2003 um 21:55 Uhr von flenders editiert. ]



  • Wenn dem so ist,

    Natürlich ist dem so:

    If the data is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, cbData must include the size of the terminating null character or characters.

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/regsetvalueex.asp?frame=true

    [ Dieser Beitrag wurde am 16.01.2003 um 21:55 Uhr von -King- editiert. ]



  • Dann könnte man es auch mit sizeof(xyz) machten, oder? 🙄
    Ich will hier keinen Streit anfangen, interessiert mich halt 😉



  • Dann könnte man es auch mit sizeof(xyz) machten, oder?

    char test[256];
    strcpy(test, "test");
    

    Und Du möchtest jetzt 256 Bytes in die Registry schreiben anstelle von 5? Also ich weiß ja nicht. Ich weiß auch nicht, wie sich die Funktion verhält, wenn sie auf den undefinierten Krams hinter dem String stösst. Ich kann mir gut vorstellen, daß sie dann mit ERROR_INVALID_PARAMETER zurückkehrt. Ich habe das jetzt aber nicht wirklich verifiziert.



  • @ King
    Hab da mal ne frage...Is dein Name Programm ??? 😃

    Es ist die erste Lösung, die bei mir gefunzt hat *superfreu*

    @ ALL
    Vielen dank für eure Hilfe

    Gute Nacht alle miteinander

    CU Laubfrosch



  • Hab den FAQ-Eintrag berichtigt.



  • @King: Sorry, da hatte ich wohl gestern nen kleinen Aussetzer 🙄



  • @flenders: Macht doch nix, den haben wir alle mal... auch -King-.

    cya 🙂


Anmelden zum Antworten