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