writereigistry aufrufen



  • Deine Funktion writeRegistry macht ja nichts weiter als den RegKey zu öffnen. Geschrieben wird dort nichts.
    Sieh mal hier: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724923(v=vs.85).aspx



  • So ganz verstehe ich den Beitrag nicht.

    Wenn ich jetzt so enfüge, bekomme ich Fehler

    int main()
    {
        ifstream fin("input.txt");
        string var1;
        fin >> var1;
        cout << var1 <<   endl;
        cin.get();
    
    	 if(var1 != "") {
            writeRegistry(var1);
    		(RegSetValueEx (hkey,valueName.c_str(),
    					  0,
    					  REG_SZ,
                          (BYTE*)value.c_str(),
    					  value.size()+1))
    
        } else {
            cout << "Fehler beim abrufen" << endl;
        }
    

    1>------ Erstellen gestartet: Projekt: test5, Konfiguration: Debug Win32 ------
    1> main.cpp
    1>d:\visual studio 2010\projects\test5\test5\main.cpp(42): error C2065: 'hkey': nichtdeklarierter Bezeichner
    1>d:\visual studio 2010\projects\test5\test5\main.cpp(42): error C2065: 'valueName': nichtdeklarierter Bezeichner
    1>d:\visual studio 2010\projects\test5\test5\main.cpp(42): error C2228: Links von ".c_str" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist ''unknown-type''
    1>d:\visual studio 2010\projects\test5\test5\main.cpp(45): error C2065: 'value': nichtdeklarierter Bezeichner
    1>d:\visual studio 2010\projects\test5\test5\main.cpp(45): error C2228: Links von ".c_str" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist ''unknown-type''
    1>d:\visual studio 2010\projects\test5\test5\main.cpp(46): error C2065: 'value': nichtdeklarierter Bezeichner
    1>d:\visual studio 2010\projects\test5\test5\main.cpp(46): error C2228: Links von ".size" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist ''unknown-type''
    1>d:\visual studio 2010\projects\test5\test5\main.cpp(50): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • Ich hab ja nicht geschrieben, dass du das RegOpen durch RegSetValue ersetzen sollst. Prinzipiell ist es bei der Registry so, dass du zuerst den Key öffnen musst und dann mit dem geöffneten Key schreiben/lesen darfst.
    Das RegOpen war schon in Ordnung nur musst du danach noch RegSetValue aufrufen, wenn das open erfolgreich war.
    Im Netz gibt es dazu genügend Beispiele. Setz dich mit denen mal auseinander.



  • Sorry, hatte ich glaube ich falsch verstanden. Ich wühle mich schon seid tagen im Internet.

    #include<iostream>
    #include<fstream>
    #include<sstream>
    #include<cstring>
    #include<winsock2.h>
    
    using namespace std;
    
    void writeRegistry(string var1){
    
            HKEY hkey;
            try {
                    string valueName = "Server";
                    string value = var1+"\\kkt";
    
                if(RegOpenKeyEx(HKEY_CURRENT_USER,"SOFTWARE\\bbt",0,KEY_ALL_ACCESS, &hkey)==ERROR_SUCCESS)
    			if(RegSetValueEx (hkey,valueName.c_str(),0,REG_SZ,(BYTE*)value.c_str(), value.size()+1) == ERROR_SUCCESS)
    
    				cout << "OK" << endl;    
                    RegCloseKey(hkey);
                    cout << "fehler" << endl;
            } catch(...) {
    
            }
    }
    
    int main()
    {
        ifstream fin("input.txt");
        string var1;
        fin >> var1;
        cout << var1 <<   endl;
        cin.get();
    
         if(var1 != "") {
            writeRegistry(var1);
        } else {
            cout << "Fehler beim abrufen" << endl;
        }
    
    }
    

    Es geht zwar immeroch nicht, aber ich mache mir jetzt erstmal was zum Essen. Danke trozdem für eure Bemühungen.



  • Hast du schon debugged? Was geht nicht? Öffnet er den Key korrekt? Gibts den Key?
    Gibts eine Fehlermeldung (Return-Wert) bei RegSetValue? Nur "geht nicht" zu schreiben ist nicht sehr hilfreich.



  • Source2702 schrieb:

    Hast du schon debugged? Was geht nicht? Öffnet er den Key korrekt? Gibts den Key?
    Gibts eine Fehlermeldung (Return-Wert) bei RegSetValue? Nur "geht nicht" zu schreiben ist nicht sehr hilfreich.

    Wenn ich debugge kommt

    Der Thread 'Win32-Thread' (0x1f08) hat mit Code -1073741510 (0xc000013a) geendet.
    Das Programm "[7040] test5.exe: Systemeigen" wurde mit Code -1073741510 (0xc000013a) beendet.

    Wenn ich die exe starte, bekomme ich lediglich die ausgabe aus der eingabedatei aus der txt.

    Sonst passiert gar nichts. Keine Fehlermeldung.

    Der Key existiert und ist auch richtig geschrieben (groß/kleinschreibung)

    Aber geändert wird er nicht.

    Wie kann ich prüfen, ob er den Key öffnet?



  • Am besten du setzt ganz am Anfang einen Breakpoint und steppst Zeile für Zeile durch. Irgendwann wird es bumm machen. RegOpenKey liefert eine Variable vom Typ LONG zurück. Die prüfst du ab. Ist sie != ERROR_SUCCESS, dann gab es einen Fehler.



  • Ich habe noch nie mit Breakpoints gearbeitet. Von daher weiss ich nicht ob ich das richtig gemacht habe.

    Wenn ich an Zeile 1 vor der Nummerierung anklicke, kommt ein roter Punkt. Dann klicke ich F5. Dann bleibt er an Zeile 9 stehen

    void writeRegistry(string var1){
    

    Bedeutet das, dass da ein Fehler ist?



  • Setze einen Breakpoint an die ersten Stellen im Code, wo etwas passiert - Funktionsaufrufe z.B. RegOpenKeyEx.
    Der Debugger stoppt an der Stelle und du kannst dir dann anschauen auf welchen Wert Variablen zur dieser Zeit gesetzt sind. Dann kannst du dich schrittweise nach vorne tasten, bis an den Punkt an dem etwas nicht stimmt.



  • Hallo,

    also ich glaube, ich bin zu doof dafür. Egal wo ich den Breakpoint setze. Unten in den Fenstern "Auto, Lokal, Threads, Überwachen1" ist nie was drin.



  • Du musst das Programm als Debug kompilieren und dann natürlich auch Starten. Ein Breakpoint wird während der Programmausführung aktiv. Ich würde dir aber empfehlen, dich zuerst ein bisschen mit den Grundlagen auseinander zu setzen. Sonst wird das nix.



  • Hallo,

    ich hab emir jetzt einige tutorials und Videos zum debugger angesehen. Egal wo ich den Brakpoint setze, es kommt bei mir nicht dieser gelbe Punkt.

    Edit:

    Ich habe das Projekt komplett gelöscht und nochmal angelegt. Jetzt bekomme ich im Konsolenfenster. Die Ausgabe OK

    Also, es funktioniert.

    Danke für eure Hilfe.


Anmelden zum Antworten