Regestry



  • HKEY hkey;
    char place[]= "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    char name[] = "Programm";
    char value[]= "C:\\Temp\\Programm.exe";
    long rQuery, rOpen;
    
    rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (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(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0,  KEY_WRITE, &hkey);
          if(rOpen != ERROR_SUCCESS)
          {
             ShowMessage("Fehler beim Schreiben in die Registry");
             RegCloseKey(hkey);
          } 
          else
          {
             RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value));
             RegCloseKey(hkey);
             ShowMessage("Schlüssel neu angelegt");
          }
       }
    }
    else
    {
       ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen
    }
    

    so das müsste passen!!

    danke no mal!!
    cu



  • du öffnest 2 mal und schließt drei mal...hattest das was falsch mit den klammern!!



  • HKEY hkey;
    char place[]= "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    char name[] = "Programm";
    char value[]= "C:\\Temp\\Programm.exe";
    long rQuery, rOpen;
    
    rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (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(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0,  KEY_WRITE, &hkey);
          if(rOpen != ERROR_SUCCESS)
          {
             ShowMessage("Fehler beim Schreiben in die Registry");
             RegCloseKey(hkey);
          } 
          else
          {
             RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value));
             RegCloseKey(hkey);
             ShowMessage("Schlüssel neu angelegt");
          }
       }
       else
       {
            RegCloseKey(hkey);
       }
    }
    else
    {
       ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen
    }
    


  • surf. schrieb:

    du öffnest 2 mal und schließt drei mal...hattest das was falsch mit den klammern!!

    Deine {} Klammern bei else... sind unnötig, aber lassen wir das...

    Und ich öffnete nicht zweimal und schließe dreimal....
    Du solltest Dein C-Wissen in Sachen if/else mal nachbessern, dann passieren Dir solche Aussagen auch nicht...

    Und das gibt garantiert 'ne Access-Violation:

    rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0,  KEY_WRITE, &hkey); 
    if(rOpen != ERROR_SUCCESS) 
    { 
       ShowMessage("Fehler beim Schreiben in die Registry"); 
       RegCloseKey(hkey); 
    }
    

    Wernn RegOpenKeyEx fehlschlägt, wurde kein Key geöffnet, Und Du willst ihn trotzdem schließen --> BANG!

    DU öffnest nun 2 Keys und willst 3 schließen....



  • HKEY hkey;
    char place[]= "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    char name[] = "Programm";
    char value[]= "C:\\Temp\\Programm.exe";
    long rQuery, rOpen;
    
    rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (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(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0,  KEY_WRITE, &hkey);
          if(rOpen != ERROR_SUCCESS)
          {
             ShowMessage("Fehler beim Schreiben in die Registry");
             RegCloseKey(hkey);
          } 
          else
          {
             RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value));
             RegCloseKey(hkey);
             ShowMessage("Schlüssel neu angelegt");
          }
       }
       else
       {
          RegCloseKey(hkey);
          ShowMessage("Schlüssel schon vorhanden");
       }   
    }
    else
    {
       RegCloseKey(hkey);
       ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen
    }
    

    passts nun? ich hoffe *g*



  • Du haust da immer mehr Fehler rein... aber da Du ja genau weißt, was Du tust...

    Ich sags jetzt nur noch einmal:
    Wenn RegOpenKeyEx fehlschlägt (das bedeutet ReturnWert != ERROR_SUCCESS), dann wird kein Handle geöffnet, hkey ist somit ungültig und es KNALLT wenn man dann mit RegCloseKey das Ding schließen will!

    #define KNALLT Access-Violation
    


  • ich poste mal zum schluss das richtige *g* :

    HKEY hkey;
    char place[]= "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    char name[] = "Programm";
    char value[]= "C:\\Temp\\Programm.exe";
    long rQuery, rOpen;
    
    rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (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(HKEY_LOCAL_MACHINE, (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
    }
    


  • ...und wenn Du mir nun noch den Unterschied zwischen meiner Version (vor zig Beiträgen gepostet) und deiner Version erklärst...

    Abgesehen von einem unnötigen {}-Block im letzten else und einem hinzugefügtem ShowMessage sehe ich keinen Unterschied...



  • cu



  • surf. schrieb:

    weiß net...aber so funzt es halt!

    ...ohne Worte 🙄


Anmelden zum Antworten