Registry Wert ändern - Vorgehensweise?
-
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!
-
14 C:\Dokumente und Einstellungen\Admin\Desktop\read.cpp invalid conversion from `char*' to `BYTE*'
-
Probier es mit einem expliziten Typ-Casting!
// ... RegQueryValueEx(hkey, "MenuShowDelay", NULL, NULL, (BYTE *) KeyValue, &lBufferSize) ; // ...
-
Juhu, es geht^^ Und weshalb ging es bei dir und bei mir nicht?
-
Mit welchem Compiler arbeitest du?
-
Eigentlich Standard... Also schon bei Dev C++ mitgeliefert. Gibt es denn bessere Alternativen?
-
Ich arbeite, wie gesagt, mit dem gleichen! Keine Ahnung, wieso es bei dir nicht geklappt hatte.
Für private Zwecke reicht der Dev-C++-Compiler aus. Ich habe außerdem noch nie von einem anderen kostenlosen Compiler gehört, der so gut ist. Du kannst also getrost mit ihm weiterarbeiten!
-
Okay, danke!
-
WilMen schrieb:
Für private Zwecke reicht der Dev-C++-Compiler aus. Ich habe außerdem noch nie von einem anderen kostenlosen Compiler gehört, der so gut ist. Du kannst also getrost mit ihm weiterarbeiten!
Oha! Also erstmal ist der DEV-C++ kein Compiler, sondern eine IDE. Der Compiler ist IMHO der MinGW. Und ja, es gibt viel bessere und auch kostenlose IDEs, z.B. Code::Blocks. Der DEV-C++ wird im übrigen schon seit längerem nicht mehr weiterentwickelt. Es ist also nicht angeraten, mit dem weiterzuarbeiten.
@xbug: Hasu du wenigstens mal meine KLasse ausprobiert?
-
Hi,
ja habe ich auch. Es kam aber folgende Meldung:
54 C:\Dokumente und Einstellungen\Admin\Desktop\test.cpp syntax error before `.' token
-
Ja stimmt, hast recht!
-
xbug schrieb:
Hi,
ja habe ich auch. Es kam aber folgende Meldung:
54 C:\Dokumente und Einstellungen\Admin\Desktop\test.cpp syntax error before `.' token
Das war dann dein Fehler, denn er taucht in deiner cpp-Datei und nicht in der CRegistry.cpp auf. Kann mir aber nicht denken, welcher. Ist ja auch klar. Woher soll ich wissen, was bei dir Zeile 54 ist...?
-
//--------------------------------------------------------------------------- #ifndef CRegistryH #define CRegistryH //--------------------------------------------------------------------------- #include <windows.h> //--------------------------------------------------------------------------- // Possible types for values: //-------------------------------- // REG_BINARY Binary data in any form. // REG_DWORD A 32-bit number. // REG_DWORD_LITTLE_ENDIAN A 32-bit number in little-endian format (same as REG_DWORD). In little-endian format, the most significant byte of a word is the high-order byte. This is the most common format for computers running Windows NT and Windows 95. // REG_DWORD_BIG_ENDIAN A 32-bit number in big-endian format. In big-endian format, the most significant byte of a word is the low-order byte. // REG_EXPAND_SZ A null-terminated string that contains unexpanded references to environment variables (for example, “%PATH%”). It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions. // REG_LINK A Unicode symbolic link. // REG_MULTI_SZ An array of null-terminated strings, terminated by two null characters. // REG_RESOURCE_LIST A device-driver resource list. // REG_SZ A null-terminated string. It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions. // Notes on the write-functions: //----------------------------------- // - they overwrite any value careless of which type it may be // - they act as creating functions if the specified value does not exist // therefore there is no need for functions to create values class CRegistry { public: CRegistry(); ~CRegistry(); BOOL SetRoot(HKEY hRootKey); // Path functions BOOL OpenPath(LPTSTR szPath, BOOL bCanCreate); BOOL ClosePath(); BOOL PathExists(LPTSTR szPath); BOOL CreatePath(LPTSTR szPath); BOOL DeleteLastPathKey(LPTSTR szPath); // Deletes last key in szPath // Value functions BOOL ValueExists(LPTSTR szValName); BOOL GetValueSize(LPTSTR szValName, LPDWORD lpdwSize); BOOL GetValueType(LPTSTR szValName, LPDWORD lpdwType); BOOL WriteString(LPTSTR szValName, LPTSTR szValue); BOOL WriteDWORD(LPTSTR szValName, DWORD dwValue); BOOL ReadString(LPTSTR szValName, LPTSTR lpszRetVal, DWORD dwBufSize); BOOL ReadDWORD(LPTSTR szValName, LPDWORD lpdwRetVal); // Other functions LPTSTR GetLastError(); }; //--------------------------------------------------------------------------- #endif //--------------------------------------------------------------------------- CRegistry reg; reg.SetRoot(HKEY_CURRENT_USER); reg.OpenPath( TEXT("Console") ); TCHAR szValue[100]; reg.ReadString(TEXT("ColorTable04"), szValue, 100);
-
Oh Scheiße... Ich glaube, du solltest erstmal ein Tutorial über C/C++ lesen. Du kannst doch nicht einfach deinen Code in die CRegistry.h schreiben. Die CRegistry-Dateien lässt du bitte unangetastet. Binde die CRegistry.cpp in dein Projekt mit ein und inkludiere in deiner Projekt-cpp-Datei die CRegistry.h. Dann kannst du in der Projekt-cpp-Datei auf die Klasse CRegistry zugreifen.
-
Selber Fehler:
#include "creg.h" CRegistry reg; reg.SetRoot(HKEY_CURRENT_USER); reg.OpenPath( TEXT("Console") ); TCHAR szValue[100]; reg.ReadString(TEXT("ColorTable04"), szValue, 100);
-
Toll. Und wo ist deine WinMain oder Main-Funktion? Dir ist schon klar, dass du code nicht einfach irgendwo hinpflanzen kannst, wo es dir gerade passt, oder?
#include "CRegistry.h" int main() { // Hier der Code return 0; }