registry lesen/veraendern



  • Hallo zusammen,

    ich habe vor ein Programm zuschreiben, welches Registryeintraege auslesen und aendern kann... Nun habe ich allerdings eine Frage, da ich immer den selben fehler bekomme.

    Hier der Code:

    #include <windows.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	HKEY hKey;					//rootfolder
    	hKey= HKEY_CURRENT_USER;
    
    	LPCTSTR lpSubKey;			//subfolder
    	lpSubKey = "Test1";
    
    	LPCTSTR lpValueName;		//Eintrag
    	lpValueName = "test";
    
    	RegCreateKeyEx(hKey,lpSubKey,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);		//Erstelle/oeffne Ordner
    
    	char buffer[80];				// einzugebnde Wert
    
    	cin.get(buffer,79);				// Werteingabe
    
    	BYTE cString[]= buffer;			//umwandlung von char zu BYTE funktioniert nicht
    
    	RegSetValueEx(hKey,"EintragsName",0,REG_SZ,cString,strlen(buffer)+1);						//Erstelle/aendere Wert
    
    	RegCloseKey(hKey);
    
    return 0;
    }
    

    Fehler: main.cpp(25) : error C2440: 'initializing' : cannot convert from 'char [80]' to 'BYTE []'

    da ich das Programm flexible halten will soll auch eine Eingabe erfolgen, in der man den Wert selber eingeben kann. Nun habe ich aber das Problem, dass 'strlen()'nur bei strings und nicht bei BYTE funktioniert, um den benoetigten Speicher zubestimmen...

    wie es im Tutorial beschrieben ist, sollte es eigentlich moeglich sein:

    BYTE cString[]="Hallo, das ist der eigentliche Wert, der unter dem Namen EintragsName gespeicehrt wird";
    RegSetValueEx(hKey,"EintragsName",0,REG_SZ,cString,strlen(cString)+1);
    

    ist es aber nicht... Koennt ihr mir helfen?

    mfg n0rse

    ps.: Ich bin nach diesem Tutorial:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39373.html

    sowie dieser MSDN seite vorgegangen:

    http://msdn.microsoft.com/en-us/library/ms724875(VS.85).aspx



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET 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 n0rse,

    vereinbare den Namespace Microsoft::Win32.

    using namespace Microsoft::Win32;

    Gruß, Doug_HH



  • ich hab das mal probiert, dann gibt mir der compiler immer folgenden fehler:

    error C2871: 'win32' : a namespace with this name does not exist

    was soll mir dieser namespace denn helfen, kenne mich damit nicht aus...

    vielen dank schonmal



  • Sorry, hab zu schnell geantwortet.
    Hier eine kurze MSDN Hilfe.

    http://msdn.microsoft.com/en-us/library/ms942534.aspx

    Oder die Möglichkeit mit Microsoft::Win32;

    Setzen...

    Registry::SetValue("HKEY_CURRENT_USER\\Test\\Programm\\Datenbank","DatabaseConnection","Eintrag");
    

    Auslesen...

    String^ datenBankName = Convert::ToString(Registry::GetValue("HKEY_CURRENT_USER\\Test\\Programm\\Datenbank","DatabaseConnection",""));//Registry einlesen
    

    Gruß, Doug_HH

    Edit*/ Sehe ich jetzt erst, bin ja im falschen Forum, hab Dir zum Teil C++/CLI Hilfe gegeben...



  • hmm ich habe nun 2 probleme, mein programm laeuft nun soweit wie ich es haben will, nur erfuellt es nicht seinen zweck 🙂

    Folgende Fehler:

    1.) Wenn ich die *.exe auf einem anderen Rechner starten moechte kommt folgende Fehlermeldung:

    This application has failed to start because the application configuration is incorrect.Reinstalling the application may fix this problem

    2.) Das Programm aendert die Registry so wie es sein sollte, das ist schonmal gut. Allerdings sollten diese Registryeintraege den Gateway aendern, wie hier beschrieben: http://www.codeguru.com/cpp/i-n/internet/generalinternet/article.php/c3459__1
    Leider aendert das Programm nur den Registryeintrag, aber Windows scheint sich darum nicht zukuemmern, der Registyeintrag bleibt auch nach einem neustart geaendert, allerdings aendert sich der Gateway nicht.

    hoffe ihr koennt mir weiter helfen, c++ ist fuer mich sehr neu und das sollte mein erstes Projekt sein.

    mfg n0rse

    edit: was ich vergessen habe: zu 1.) Wenn ich die *.exe auf meinem Rechner starte funktioniert das Programm. Denke mal, dass ich irgendwas beim erstellen der exe falsch mache



  • "Projekt" -> Eigenschaften -> C/C++ -> Codegenerierung -> Laufzeitbibliothek

    diese auf Multithreaded stellen.



  • vielen dank, das funktioniert schonmal, nun muss ich ma wegen dem anderen prob schauen

    mfg n0rse


Anmelden zum Antworten