Die Registry - howto ??



  • Hallo miteinander,
    da ich grade wieder ausm Urlaub da bin, brauche ich jetzt dringend etwas schönes zum Proggen.... Hatte da so die Idee eines Programmes (Console)
    welches mir alle einträge aus
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
    ausliest und anzeigt....

    meine Frage also, wie lese ich Daten (Schlüssel+Werte) aus der Registry,
    wie schreibe ich neue, ändere Sie, welche *.h müssen eingebunden werden ??

    Dank



  • Das ist natürlich kein AnsiC, du musst dir ne entsprechende lib suchen.



  • Also ich habe mal so ein ähnliches Programm geschrieben....

    ist aber noch nen Fehler drin, weiß aber selber leider nicht, welcher, weil ich zurzeit noch keine entwicklungsumgebúng zur verfügung habe (hatte heut
    morgen erst formatiert) und noch nicht alles wieder installiert...

    #include <stdio.h>
    #include <iostream.h>
    #include <windows.h>
    #include <string.h>
    
    int main()
    {
    	char RegPath[MAX_PATH] = "\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\";
    
    	HKEY hKey; 
    
    	RegOpenKey(HKEY_LOCAL_MACHINE,RegPath,&hKey);
    
    	DWORD dwNumber=150; 
    	RegSetValueEx(hKey,"EintragsName",0,REG_DWORD,(BYTE*)&dwNumber,sizeof(DWORD));
    
    	return 0;
    }
    

    kennt jemand den fehler ?
    das progg soll in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
    den Schlüssel EintragsName anlegt und den wert 150 anlegt

    bye



  • erstens lieber main(void),

    zweitens glaube ich dass vor "Software" kein "\" gehört, probier es mal aus...

    //EDIT: hier wirds auch ohne gemacht: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getting_the_system_version.asp



  • nee geht auch net



  • ach ja, die backslashes am ende auch wegmachen...

    btw: das wird doch hoffentlich kein viruz 😃



  • nee wird kein virus, ach ja die \\ am ende hatte ich schon weg gemacht, aber tat trozdem net

    hier

    #include <stdio.h>
    #include <iostream.h>
    #include <windows.h>
    #include <string.h>
    
    int main()
    {
    	char RegPath[MAX_PATH] = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    
    	HKEY hKey; 
    
    	RegOpenKey(HKEY_LOCAL_MACHINE,RegPath,&hKey);
    
    	DWORD dwNumber=150; 
    	RegSetValueEx(hKey,"EintragsName",0,REG_DWORD,(BYTE*)&dwNumber,sizeof(DWORD));
    
    	return 0;
    }
    


  • compile mal und sag den fehler, ich bin zu faul...



  • Das ist ja das Problem, es wird kein Fehler angezeigt,
    das Programm macht aber trotzdem nicht was es soll.....

    es startet und es passiert nix, also es macht mit sicherheit was, denn es läuft ja bis zum ende (Press any key to continue), das war es dann aber auch !!!

    ??? 😕 ???



  • hol dir mal mit GetLastError den Fehlercode



  • loki1985 schrieb:

    erstens lieber main(void),

    Quatsch, das ist egal



  • @Rodney:

    ok habe es jetzt so gemacht

    #include <stdio.h> 
    #include <iostream.h> 
    #include <windows.h> 
    #include <string.h> 
    
    int main() 
    { 
        char RegPath[MAX_PATH] = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; 
    
        HKEY hKey; 
    
        RegOpenKey(HKEY_LOCAL_MACHINE,RegPath,&hKey); 
    
        DWORD dwNumber=150; 
        RegSetValueEx(hKey,"EintragsName",0,REG_DWORD,(BYTE*)&dwNumber,sizeof(DWORD));
    	cout << GetLastError();
    
        return 0; 
    }
    

    Dann gibt er mir ne 0 aus



  • aber funktioniert immer noch nicht....

    wieso ??
    was heisst die 0 ??



  • Ich habe es mal folgendermaßen gemacht....

    #include <stdio.h> 
    #include <iostream.h> 
    #include <windows.h> 
    #include <string.h> 
    
    int main() 
    { 
        char RegPath[MAX_PATH] = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; 
    
        HKEY hKey; 
    
        RegOpenKey(HKEY_LOCAL_MACHINE,RegPath,&hKey); 
    
        DWORD dwNumber=150; 
        RegSetValueEx(hKey,"EintragsName",0,REG_DWORD,(BYTE*)&dwNumber,sizeof(DWORD));
    
    	BYTE cString[]="C:\games\icytower1.2\icytower.exe"; 
    	 :confused: RegSetValueEx(hKey,"IcyTower",0,REG_SZ,cString,strlen(cString)+1);	
    
    	cout << GetLastError();
    
        return 0; 
    }
    

    An der Stelle mit dem 😕 kommt folgender Fehler

    Kompilierung läuft...
    registry.cpp
    C:\Eigene Dateien\Test Sourcecodes\registry.cpp(18) : error C2664: 'strlen' : Konvertierung des Parameters 1 von 'unsigned char [34]' in 'const char *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    Fehler beim Ausführen von cl.exe.
    
    registry.exe - 1 Fehler, 0 Warnung(en)
    

    Wie genau muss diese Zeile dann aussehen ??



  • Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • hallo,

    so _kann_ eine mögliche Lösung aussehen:

    char* cString = "C:\\games\\icytower1.2\\icytower.exe";
    RegSetValueEx(hKey,"IcyTower",0,REG_SZ,(BYTE*)cString,strlen(cString)+1);

    mfg
    rb



  • aua... bitte:

    char cString[] = "C:\\games\\icytower1.2\\icytower.exe";
    

    Du scheinst ein ziemlicher Icytower-freak zu sein wenn du schon beim starten des pcs icytowere spielen willst ^^ :p



  • du musst auf const char * casten in strlen



  • hi,
    bei mir gehts so wie´s "kein-Benutzer"
    geschrieben hat 🙂 -> compiler Borland c++
    mfg dr.melon


Log in to reply