Lesen von Werten aus der Registry
-
Was sagen denn die Rückgabewerte der einzelnen Funktionsaufrufe? Gelingen die alle?
-
Ich habe das so überprüft:
HKEY key; DWORD bufferLen = 128; BYTE buffer[128]; LONG rueckgabe1; LONG rueckgabe2; rueckgabe1 = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\FinalWire\\AIDA64\\SensorValues"),0, KEY_READ, &key); rueckgabe2= RegQueryValueEx(key, TEXT("TCPU"), NULL, NULL, buffer, &bufferLen); RegCloseKey(key); if (rueckgabe1 == ERROR_SUCCESS){ printf("Kein Fehler bei RegOpenKeyEx \n"); } else if (rueckgabe1 != ERROR_SUCCESS) { printf("Fehler bei RegOpenKeyEx ! \n"); } if (rueckgabe2 == ERROR_SUCCESS){ printf("Kein Fehler bei RegQueryValueEx \n"); } else if (rueckgabe1 != ERROR_SUCCESS) { printf("Fehler bei RegQueryValueEx! \n"); } std::cout << "Test: " << buffer << endl;
Er gibt wirklich aus, dass es bei beiden einen Fehler gibt, aber ich weiß nicht was der Fehler ist.
-
luc99 schrieb:
Er gibt wirklich aus, dass es bei beiden einen Fehler gibt, aber ich weiß nicht was der Fehler ist.
Gibt es denn keine Dokumentation in der steht, wie man Informationen zu einem Fehler von
RegOpenKeyEx()
bekommt?Vielleicht in der MSDN?
Und eventuell verschiebt jemand von der geehrten Moderation diesen Thread mal in ein passenderes Forum?!
-
Du kannst dir die Fehlermeldung per FormatMessage in Klartext formatieren lassen.
Edit:
Dein Code ist auch etwas unglücklich aufgebaut. Es macht natürlich nur dann Sinn weiterzumachen, wenn die benötigten Funktionen gelingen. Du kannst also nach dem ersten Fehlschlag abbrechen, anstatt alle Funktionen aufzurufen und hinterher zu gucken, welche fehlgeschlagen ist.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) 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.
-
luc99 schrieb:
Er gibt wirklich aus, dass es bei beiden einen Fehler gibt, aber ich weiß nicht was der Fehler ist.
Da können wir gerne mal alle raten was Dir GetLastError() rausgeben würde.
-
Es gibt ein simples Tool namens ErrLook, mit dem man jeden return code in Klartext anzeigen kann.
C:\Program Files (x86)\Microsoft Visual Studio 12.0\\Common7\Tools\errlook.exe
Ansonsten hilft ein schneller Blick in die winerror.h!
-
Martin Richter schrieb:
Es gibt ein simples Tool namens ErrLook, mit dem man jeden return code in Klartext anzeigen kann.
Das ERRLOOK-Dienstprogramm ist wohl seit VS2005 aus dem Menü Extras komfortabel aus der IDE aufzurufen.
https://msdn.microsoft.com/de-de/library/akay62ya.aspx
Ob der TE allerdings VS verwendet konnte ich nicht feststellen ...
-
Erstmal sorry für die späte Antwort.
Der ausgegebene Fehler bedeutet laut Errlook "Zugriff verweigert"
-
Der ausgegebene Fehler bedeutet laut Errlook "Zugriff verweigert"
Diesen Eigenartigen Fehler hatte ich auch. Ich habe von Hand mit 'regedit.exe' die Berechtigung gesetzt. Dann ging es.
-
KEY_WOW64_64KEY könnte helfen. Die 64-bit-Abteilung in der Registry wird im RegEditor nur virtualisiert, es gibt diese in "echt" also nicht. Möchte man darauf zugreifen, kann man entweder den ISN (Image-Specific Node, i.d.R. Wow6432Node) mit angeben, oder man geht eben über den genannten Flag bei der Access-Methode ran. Andernfalls gibt es auch Zugriffsfehler.
Sollte es daran nicht liegen (was wahrscheinlich der Fall ist), kannst du dir entweder während der Laufzeit mit den entsprechenden WinAPI-Funktionen die Berechtigung holen (u.U. wird aber ein Passwort gefordert) oder du führst dein Programm über Rechtsklick -> "Als Administrator ausführen" aus.