neuen namen in registry schreiben



  • hi!

    wie bekomme ich mein programm dazu, in der registry statt in den schlüssel (standard) in einen selbstdefinierten schlüssel zu schreiben?
    muss ich dafür einen anderen api-call als RegSetValue benutzen?

    die registry-function in meinem c-code sieht so aus:

    void reginsert(char *name, char *content, char *keytarget) {
    
        HKEY hKey; 
        RegCreateKey(HKEY_CURRENT_USER, keytarget, &hKey);
        RegSetValue(hKey, name, REG_SZ, content, strlen(content));
        RegCloseKey(hKey);
    
    return;
    

    diese funktion schreibt aber den wert nur in (standard)...

    wichtig: ich kann bis jetzt nur C. C++ calls bringen mir nix.



  • Guck dir am besten mal den Beitrag zum Thema Registry in den FAQs an! Der sollte eigentlich alles klären...



  • // Name des gestarteten exe-Datei bestimmen
       GetModuleFileName(NULL,buf,1000);
       char *FileName = strrchr(buf,'\\');
       FileName++;
       s=FileName;
    
       HKEY hkey;
       HKEY KEY = HKEY_LOCAL_MACHINE;
    
       char place[]= "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
       char name[] = "invisible";
       char value[100];
       value[0]=0;
       strcpy(value,s.c_str());
       long rQuery, rOpen;
    
       rOpen = RegOpenKeyEx(KEY, (LPCTSTR)place, 0, KEY_READ, &hkey);
       if(rOpen == ERROR_SUCCESS)
       {
          // Registry konnte geöffnet werden! Somit ist hKey gültig!
          rQuery = RegQueryValueEx(hkey, name, 0, 0, 0, 0);
          if(rQuery != ERROR_SUCCESS)
          {
             // Key existiert noch nicht!
             RegCloseKey(hkey);
             // In die Registry eintragen
             rOpen = RegOpenKeyEx(KEY, (LPCTSTR)place, 0,  KEY_WRITE, &hkey);
             if(rOpen != ERROR_SUCCESS)
             {
                //ShowMessage("Fehler beim Schreiben in die Registry");
             }
             else
             {
                RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value));
                RegCloseKey(hkey);
                //ShowMessage("Schlüssel neu angelegt");
             }
          }
          else
          {
             //ShowMessage("Schlüssel schon vorhanden");
             RegCloseKey(hkey);
          }
       }
       else
       {
          //ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen
       }
    


  • danke für dein example. leider konnte ich es testweise nicht compilen (mit bcc 5.5.1), bekam 5 errors...

    vielleicht sollte ich mal mein problem genauer beschreiben:

    momentan steht bei mir unter HKEY_CURRENT_USER\Software\Company\Product\Version:

    Name            Typ            Wert
    (Standard)      REG_SZ         C:\myprogram
    

    ich will aber keinen neuen default-KEY mit einem wert erstellen, sondern ich will in einen neuen NAMEN mit neuem WERT erstellen.
    es sollte also so aussehen:

    Name            Typ            Wert
    ProgramDir      REG_SZ         C:\myprogram
    

    ^
    |
    |

    wie stelle ich das an?



  • probiers mal mit RegCreateKeyEx...



  • wenn ich das in msdn richtig verstanden habe, kann ich mit RegCreateKeyEx nur eine art directory in der registry anlegen, aber nicht den inhalt.

    sollte es damit doch gehen, dann wie?



  • Du hast doch jetzt schon ein Beispiel bekommen, und in den FAQ steht doch auch wie's geht -> FAQ: Registry

    Also du brauchst eben RegSetValueEx - bei RegSetValue steht in der MSDN-Library ja auch:

    The RegSetValue function sets the data for the default or unnamed value of a specified registry key.



  • thanx, jetzt klappts.
    immer diese winzigen details... 🙂


Anmelden zum Antworten