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 einlesenGruß, 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