Registry Wert ändern - Vorgehensweise?
-
Hallo liebe Community.
Ich habe mir schon die FAQ zum Thema Registry durchgelesen, bin aber im Bezug auf das Ändern von Werten etwas unschlüssig. Anscheinend gibt es keine vorgefertigte Funktion, mit welcher man z.B. einen Wert oder den Datentyp ändern kann. Meine Frage: wie kann ich jetzt vorgehen, um:
- den Datentyp eines Keys zu änden
- den Wert eines Keys umzubennen
Ich bedanke mich für eure Antworten!
Grüsse xbug
-
Hallo xbug
Schau dir mal das an:
--> http://msdn2.microsoft.com/en-us/library/ms724871.aspx
Bin sicher das hilft dir weiterMFG
-
Hallo! Ich habe dazu einen Codeschnipsel gefunden. Aber wie kann ich jetzt den Inhalt des Keys ausgeben?
DWORD dwType; TCHAR szValue[100]; DWORD dwSize = sizeof(szValue)*sizeof(TCHAR); LONG lRet = RegQueryValueEx(hKey, _T("key_bezeichnung"), NULL, &dwType, (LPBYTE) szValue, &dwSize); if ( (lRet == ERROR_SUCCESS) && ( (dwType == REG_SZ) || (dwType == REG_EXPAND_SZ)) ) { }
-
Dürfte in szValue stehen.
-
Hallo, leider steht nix in der Variable. Ich code übrigens C++ (Konsolenapplikation).
-
Hallo xbug,
hier ein Beispiel mit dem man die Start-Zeit aus der Registry auslesen kann.
//... // Deklarationen von vorher HKEY hKey ; RegOpenKeyEx (HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_SET_VALUE, &hKey); LONG lRet = RegQueryValueEx(hKey, _T("StartTime"), NULL, &dwType, (LPBYTE) szValue, &dwSize); RegCloseKey(hKey) ; // eventuelle Ausgabe (Sonst würde das Programm ja auch nichts nützen! ;-) ) //...
Dein Problem war, dass du gar keinen gültigen/initialisierten Handle zu dem Schlüssel hattest. Dies wurde nun mit der Funktion "RegOpenKey" getan. Nach dem Öffnen eines Schlüssels darf man aber das Schließen nicht vergessen und hierfür nimmst du die Funktion "RegCloseKey".
Mit freundlichen Grüßen
WilMen
-
Ja, danke! Hättest du denn noch eine Lösung für die Ausgabe?
-
Du sagtest du Programmierst in C++ eine Konsolen-Applikation.
Also kannst du doch für die Ausgabe einfach "cout" oder (schon aus C bekannt) "puts" verwenden.//... cout << szValue << endl ; // oder puts(szValue) ; //...
-
Hi!
Mein Compiler (Dev++) zeigt leider einen Fehler:
17 C:\Dokumente und Einstellungen\Admin\Desktop\reg.cpp `dwType' undeclared (first use this function)
-
Denk doch auch mal selber ein bisschen nach.
DWORD dwType;
-
Jeder hat mal klein angefangen,...
...aber in meinem ersten Thread schrieb ich bereits, dass du die Deklarationen aus dem von dir geposteten Code-Abschnitt übernehmen sollst!
-
Hey Jungs,
leider werden mir nur kryptische Zeichen ausgegeben
Hier mein Code:
#include <conio.h> #include <windows.h> #include <stdio.h> #include <tchar.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { // ############# HKEY hKey ; DWORD dwType; TCHAR szValue[100]; DWORD dwSize = sizeof(szValue)*sizeof(TCHAR); RegOpenKeyEx (HKEY_CURRENT_USER, "HKEY_CURRENT_USER\\AppEvents\\XXX_Key", 0, KEY_SET_VALUE, &hKey); LONG lRet = RegQueryValueEx(hKey, _T("EintragsName"), NULL, &dwType, (LPBYTE) szValue, &dwSize); RegCloseKey(hKey) ; printf(szValue); // ############## printf ("Press any key..."); getch(); return 0; }
-
RegOpenKeyEx(HKEY_CURRENT_USER, "AppEvents\\XXX_Key", 0, KEY_SET_VALUE, &hKey);
-
Hi, es geht leider immer noch nicht
-
Dann benutze halt die CRegistry-Klase, die du auf meiner Homepage findest. Dann geht das so:
CRegistry reg; reg.SetRoot(HKEY_CURRENT_USER); reg.OpenPath( TEXT("AppEvents\\XXX_Key") ); TCHAR szValue[100]; reg.ReadString(TEXT("EintragsName"), szValue, 100);
-
Du musst einfach das vierte Parameter von RegOpenKeyEx in KEY_READ ändern, dann klappt es. Sorry, das war mein Fehler, denn ich habe den Funktionsaufruf ja so gepostet.
Zeile 5 und 7 kannst du übrigens entfernen. Die brauchtst du in deinem Programm nicht!
Mit freudlichen Grüßen
WilMen
-
Also er zeigt jetzt nur noch ein Zeichen... Ein Smiley^^
-
Hallo xbug,
also ich habe das Programm kompiliert und ausgeführt und alles hat geklappt. Ist der Schlüssel, dessen Wert du lesen möchtest, überhaupt schon erstellt?
-
Ja, ich habe es sogar mit einem anderen Key versucht
-
#include <windows.h> #include <stdio.h> int main(int argc, char *argv[]) { HKEY hkey; char szBuffer[255]; char KeyValue[255] ; unsigned long lBufferSize = 255; RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, KEY_READ, &hkey) ; RegQueryValueEx(hkey, "MenuShowDelay", NULL, NULL, KeyValue, &lBufferSize) ; RegCloseKey(hkey) ; printf("Wert des Schluessels: %s",KeyValue, "\n\nPress any key...") ; getchar() ; return (0); }
Kompiler mal dieses Code. Ich habe ihn mit dem "Dev-C++ 4.9.9.2" kompiliert und es funktioniert!
Sollte es jetzt immer noch nicht funktionieren, dann muss es am Compiler liegen!