mit cPlusPlus aus Registry DWORD und SZ Werte auslesen
Richtige Syntax, Bitte.
Ich habe mit c++ in die Registry geschrieben DWORD und SZ Werte, möchte Sie aber dann wieder auslesen
(danach soll der eingelesene Werte z.B. vergliechen werden mit Zahlen(vergleichen mache ich selbst),
HKEY_LOCAL_MACHINE\SOFTWARE\test\ in dem Schlüssel sind dann die Werte 1,2,3,...).
um dann damit weiter Arbeiten zu können.
Bitte um Hilfe, wie ich die Registry Werte auslesen kann( DWORD, SZ Werte),
ich verzweifle noch ;-(
Danke mghelp
Ich habe mit c++ in die Registry geschrieben DWORD und SZ Werte, möchte Sie aber dann wieder auslesen
(danach soll der eingelesene Werte z.B. vergliechen werden mit Zahlen(vergleichen mache ich selbst),
HKEY_LOCAL_MACHINE\SOFTWARE\test\ in dem Schlüssel sind dann die Werte 1,2,3,...).
um dann damit weiter Arbeiten zu können.
Bitte um Hilfe, wie ich die Registry Werte auslesen kann( DWORD, SZ Werte),
ich verzweifle noch ;-(
Danke mghelp
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 38289
Url: https://administrator.de/forum/mit-cplusplus-aus-registry-dword-und-sz-werte-auslesen-38289.html
Ausgedruckt am: 22.12.2024 um 22:12 Uhr
6 Kommentare
Neuester Kommentar
Moin mghelp,
offen gestanden werde ich aus Deinem Beitrag nicht ganz schlau...
...das heißt doch aber hoffentlich nicht, dass Du beim Experimentieren mit den Registryfunktionen als erstes mal eben in die Registry geschrieben hast, bevor Du es überhaupt versucht hast, die Werte zu lesen?
Ich meine, es geht mich ja nichts an und früher war ich auch risikofreudiger, aber...überdenken würde ich dieses Vorgehen nochmal.
Na ja, das kannst Du an Deinem PC machen, als erstes in den HKLM-Zweig schreiben, ich übe lieber erstmal in HKCU *gg
Und wieso Dir das Lesen der Werte Probs macht, Du aber das Vergleichen hinbekommst...
..muss eine neue Technik sein, nach der Du codest... ist mir jedenfalls fremd.
However, ich hab Dir mal einen kleinen Demo-Schnipsel zum Spielen gesammengeharkt:
Is' sich jezz nicht so aufregend, was die paar Zeilen machen, soll ja auch nur zum Spielen sein.
Output wäre in etwa (wenn Schlüssel existiert, aber mit "falschen" Werten) sinngemäß:
Sollte der RegKey nicht existieren, kommt eine Meldung "HKCU\Software\mghelp\Test exixtiert nicht." oder so.
Hope That Helps
Biber
P.S. Professionellere Hilfe als bei mir bekommst Du sogar bei M$: MSDN-Library Registry Functions
P.P.S. Solche Formulierungen wie
offen gestanden werde ich aus Deinem Beitrag nicht ganz schlau...
Ich habe mit c++ in die Registry geschrieben DWORD und SZ Werte,
möchte Sie aber dann wieder auslesen
*Kopfkratz....möchte Sie aber dann wieder auslesen
...das heißt doch aber hoffentlich nicht, dass Du beim Experimentieren mit den Registryfunktionen als erstes mal eben in die Registry geschrieben hast, bevor Du es überhaupt versucht hast, die Werte zu lesen?
Ich meine, es geht mich ja nichts an und früher war ich auch risikofreudiger, aber...überdenken würde ich dieses Vorgehen nochmal.
(danach soll der eingelesene Werte z.B. vergliechen werden mit Zahlen(vergleichen mache ich selbst),
HKEY_LOCAL_MACHINE\SOFTWARE\test\ in dem Schlüssel sind dann die Werte 1,2,3,...).
HKEY_LOCAL_MACHINE\SOFTWARE\test\ in dem Schlüssel sind dann die Werte 1,2,3,...).
Na ja, das kannst Du an Deinem PC machen, als erstes in den HKLM-Zweig schreiben, ich übe lieber erstmal in HKCU *gg
Und wieso Dir das Lesen der Werte Probs macht, Du aber das Vergleichen hinbekommst...
..muss eine neue Technik sein, nach der Du codest... ist mir jedenfalls fremd.
However, ich hab Dir mal einen kleinen Demo-Schnipsel zum Spielen gesammengeharkt:
// RegTesting.cpp .... just for fun & mghelp by Biber 2006
#include <windows.h>
#include <stdio.h>
int main() {
HKEY hkey;
HKEY currentHive = HKEY_CURRENT_USER;
char sz_AdminesName = "Angie M.";
DWORD dwDefaultPDAS = 1; // Default für "PauerDownAfterShutdaun" : 1
DWORD dwDefaultPDBM = 23; // Default für "PauerDownBeforeMidnight": hex 17 = dez 23
DWORD dwKeyPDAS = 0;
DWORD dwKeyPDBM = 0;
DWORD dwLen = sizeof(DWORD);
DWORD dwDisposition = 0; // kann die Werte REG_CREATED_NEW_KEY oder
// REG_OPENED_EXISTING_KEY annehmen
DWORD Bufferlen = 100;
char sz_Admine[100] = "\0";
long hResult;
// Test - existiert der Schlüssel schon? Aber diese RegOpenHeyEx-Abfrage ist obsolet.
// Lässt sich alles mit RegCreateKeyEx() abfackeln, wie 5 Zeilen weiter unten.
if (RegOpenKeyEx(currentHive , TEXT("Software\\mghelp\\Test"),
0, KEY_ALL_ACCESS, &hkey) != ERROR_SUCCESS)
printf("HKCU\\Software\\mghelp\\Test exixtiert nicht.\n");
// return (1); //->entkommentieren, falls Du ausstiegen willst, falls Key noch nicht da.
// RegCreateKeyEx() legt den Subkey an, wenn nötig. Wenn der Subkey schon vorhanden ist,
// dann wird er geöffnet - Rückgabe der Function ist in beiden Fällen ERROR_SUCCESS == ALLESPRIMA
hResult = RegCreateKeyEx( currentHive, TEXT("Software\\mghelp\\Test"), 0, NULL,
REG_OPTION_NON_VOLATILE, /* Option REG_OPTION_NON_VOLATILE */
KEY_ALL_ACCESS, /* Accessmaske, KEY_ALL_ACCESS */
NULL, /* Security-Attribut */
&hkey, /* Da soll das Rückgabeobjekt hin */
&dwDisposition); .if (hResult != ERROR_SUCCESS)
printf("HKCU\\Software\\mghelp\\Test konnte nicht angelegt werden.\n");
// in dwDisposition steht, falls der Subkey schon da war, der Wert 2 ( REG_OPENED_EXISTING_KEY)
// falls wirklich neu angelegt wurde, hat es den Wert 1 (REG_CREATED_NEW_KEY)
// Mal ein paar Werte auslesen...das war ja die Frage
// Beispielwerte unter HKCU\Software\mghelp\Test waren von früheren Testläufen dieses Schnipsels anlegt
// und manuell per RegEdit manipuliert worden (siehe Output unten)
// a) HKCU\Software\mghelp\Test\PauerDownAfterShutdaun REG_DWORD auslesen
RegQueryValueEx(hkey, TEXT("PauerDownAfterShutdaun"), NULL, NULL,
(LPBYTE)&dwKeyPDAS, &dwLen);
// b) HKCU\Software\mghelp\Test\PauerDownBeforeMidnight REG_DWORD auslesen
RegQueryValueEx(hkey, TEXT("PauerDownBeforeMidnight"), NULL, NULL,
(LPBYTE)&dwKeyPDBM, &dwLen);
// c) HKCU\Software\mghelp\Test\AlternativeAdmine REG_SZ auslesen
RegQueryValueEx(hkey, TEXT("AlternativeAdmine"), NULL, NULL,
(LPBYTE)&sz_Admine, &Bufferlen) ;
/* Setzen des Stringwerts HKCU\Software\mghelp\Test\AlternativeAdmine REG_SZ ...egal was da stand...*/
RegSetValueEx(hkey, TEXT("AlternativeAdmine"), 0, REG_SZ,
(const BYTE*)&sz_AdminesName, sizeof(sz_AdminesName)+1);
printf( "Wert von AlternativeAdmine in Reg (%s ) auf %s gesetzt. \n" ,
sz_Admine , sz_AdminesName);
/* der Vergleich zwischen gesetztem Wert in der Registry und dem Defaultwert */
if ( dwKeyPDBM != dwDefaultPDBM) {
RegSetValueEx(hkey, TEXT("PauerDownBeforeMidnight"), 0, REG_DWORD,
(const BYTE*)&dwDefaultPDBM, dwLen);
printf ( "Defaultwert 0x%x (vorher 0x%x fuer PauerDownBeforeMidnight gesetzt.\n" ,
dwDefaultPDBM, dwKeyPDBM);
}
if ( dwKeyPDAS != dwDefaultPDAS) {
RegSetValueEx(hkey, TEXT("PauerDownAfterShutdaun"), 0, REG_DWORD,
(const BYTE*)&dwDefaultPDAS, dwLen);
printf ( "Defaultwert 0x%x (vorher: 0x%x) fuer PauerDownAfterShutdaun gesetzt." ,
dwDefaultPDAS, dwKeyPDAS );
}
RegCloseKey(hkey); // den solltest Du nicht vergessen
return 0;
}
Is' sich jezz nicht so aufregend, was die paar Zeilen machen, soll ja auch nur zum Spielen sein.
Output wäre in etwa (wenn Schlüssel existiert, aber mit "falschen" Werten) sinngemäß:
$cmd$d:\Dev-Cpp\Spielkram\regTesting.exe
Wert von AlternativeAdmine in Reg (Merkelchen ) auf Angie M. gesetzt.
Defaultwert 0x17 (vorher 0x22 fuer PauerDownBeforeMidnight gesetzt.
Defaultwert 0x1 (vorher: 0x6) fuer PauerDownAfterShutdaun gesetzt.
Z:\>
$cmd$
Hope That Helps
Biber
P.S. Professionellere Hilfe als bei mir bekommst Du sogar bei M$: MSDN-Library Registry Functions
P.P.S. Solche Formulierungen wie
Richtige Syntax, Bitte.
...finde ich eine Dreistigkeit... aber vielleicht bin ich da zu sensibel.
Na ja, mghelp,
ich hab mich bemüht, mich auf "normales" C# zu beschränken.
Ich habe ich nicht den inzwischen wohl beliebteren Weg über das .NET-Framework beschrieben
("using Microsoft.Win32.Registry" etc), den ich auch wesentlich lesbarer finde.
Hoffe also, es passt als versuchte Antwort zu Deiner Frage.
Aber, auch wenn es C++ ist, ich habe es gestern schnell zusammengeschrotet und nicht so getestet, dass es irgendwo zum Produktiv-Einsatz kommen könnte. Soll nur eine kurze und sicherlich unvollständige Skizze sein mit den üblichen drei Flüchtigkeitsfehlern je 10 Zeilen.
Handle with care, ich habe nicht so riesige Qualitätskontrollkapazitäten wie M$..
Gruß
Biber
ich hab mich bemüht, mich auf "normales" C# zu beschränken.
Ich habe ich nicht den inzwischen wohl beliebteren Weg über das .NET-Framework beschrieben
("using Microsoft.Win32.Registry" etc), den ich auch wesentlich lesbarer finde.
Hoffe also, es passt als versuchte Antwort zu Deiner Frage.
Aber, auch wenn es C++ ist, ich habe es gestern schnell zusammengeschrotet und nicht so getestet, dass es irgendwo zum Produktiv-Einsatz kommen könnte. Soll nur eine kurze und sicherlich unvollständige Skizze sein mit den üblichen drei Flüchtigkeitsfehlern je 10 Zeilen.
Handle with care, ich habe nicht so riesige Qualitätskontrollkapazitäten wie M$..
Gruß
Biber
Ist okay, mghelp,
das wird wohl hier im Forum auch so bleiben, dass hier gepostesten Beispiele und Skizzen noch angepasst und getestet werden müssen.
Es sind ja auch keine (oder wenige) UserInnen hier im Forum, die ihr Geld mit professioneller Programmierung verdienen.
Die würden mir sicherlich (berechtigterweise) so ein zusammengeschreddertes Fragment wie oben um die Ohren hauen...
...aber dafür kostet Dich eine Zeile Code hier im Forum auch nur die anteilige Lesezeit an der monatlichen Flatrate und nicht die 20 €uronen,
die jemand aus www.gelbeseiten.de /und wert) verlangen würde.
Also sei bitte nicht zu hart zu uns hilfewilligen Laien.
Grüße
Biber
das wird wohl hier im Forum auch so bleiben, dass hier gepostesten Beispiele und Skizzen noch angepasst und getestet werden müssen.
Es sind ja auch keine (oder wenige) UserInnen hier im Forum, die ihr Geld mit professioneller Programmierung verdienen.
Die würden mir sicherlich (berechtigterweise) so ein zusammengeschreddertes Fragment wie oben um die Ohren hauen...
...aber dafür kostet Dich eine Zeile Code hier im Forum auch nur die anteilige Lesezeit an der monatlichen Flatrate und nicht die 20 €uronen,
die jemand aus www.gelbeseiten.de /und wert) verlangen würde.
Also sei bitte nicht zu hart zu uns hilfewilligen Laien.
Grüße
Biber