You are not logged in.

  • Login

1

Thursday, June 30th 2011, 4:56pm

Registry

Hallo!
Könnte mir jemand die Nutzung von der Registry in C++ näher erläutern?
Ich habe mir per Google beholfen, dabei bin ich z.B. auch auf diese FAQ gestoßen.
Mein momentaner Code ist zum Schreien. Ohne if-Bedingungen oder ähnliches, Fehler gibt es auch noch.

C:\Users\[User]\Desktop\Registry-Test\main.cpp||In function 'int main()':|
C:\Users\[User]\Desktop\Registry-Test\main.cpp|13|error: invalid conversion from 'BYTE*' to 'const char*'|
C:\Users\[User]\Desktop\Registry-Test\main.cpp|13|error: initializing argument 1 of 'size_t strlen(const char*)'|
||=== Build finished: 2 errors, 0 warnings ===|

Mein Code:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
int main() {
    HKEY hKey;
    HKEY hKey2;
    BYTE CString[]="Hallo, dies ist der Teststring für den Testschlüssel.";
    DWORD Zahl=56664;
    cout << "Schluessel 1 wird angelegt." << endl;
    RegCreateKeyEx(HKEY_CURRENT_USER, "Test", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, 0);
    cout << "Schluessel 2 wird angelegt." << endl;
    RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Test2", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey2, 0);
    cout << "Wert wird in Schluessel 1 geschrieben." << endl;
    RegSetValueEx(hKey, "Eintragsname", 0, REG_SZ, CString, strlen(CString)+1);
    cout << "Wert wird in Schluessel 2 geschrieben." << endl;
    RegSetValueEx(hKey2, "Eintragsname", 0, REG_DWORD, (BYTE*)&Zahl, sizeof(DWORD));
    cout << "Schluessel 1 wird geschlossen." << endl;
    RegCloseKey(hKey);
    cout << "Schluessel 2 wird geschlossen." << endl;
    RegCloseKey(hKey2);
    cout << "Ende" << endl;
    Sleep(5000);
    return(0);
}

Das wäre Programm 1. In Programm 2 würde er die Keys öffnen, den Inhalt in eine variable speichern und dann die Keys wieder schließen. Dann würde er damit irgendwas machen und die Keys löschen.

Könnte mir jemand ein ausgiebiges Beispielprogramm zeigen?

MfG
Check

2

Thursday, June 30th 2011, 8:24pm

Einfach BYTE in char casten bzw. char in BYTE casten und gegebenfalls auf Pointer achten.
->
strlen((char*)CString)

//Edit:
Nutzung? Da kannst du halt irgentwelche Daten für dein Programm ablegen (Konfigurationen etc).
Geh mal auf Ausführen und gib regedit ein. ;)

Mfg Rushh0ur

3

Thursday, June 30th 2011, 8:43pm

Ne, weniger die Nutzung in dem Sinne, sondern genauer auf die Nutzung bei C++ würde mein Gedanke gewesen sein. Aber wie mir scheint, scheint ja alles (für den Anfang) okay zu sein.
kann man mit der Funktion RegCreateKeyEx auch verwenden, um zu überprüfen ob der Key schon da ist? Da würde es doch eine bessere Lösung geben, oder?

MfG
Check

4

Thursday, June 30th 2011, 8:49pm

Eine komplette Liste der Funktionen für die Registry findest du hier:
http://msdn.microsoft.com/en-us/library/…v=VS.85%29.aspx

Zum prüfen solltest du RegOpenKeyEx verwenden.

Mfg Rushh0ur

5

Thursday, June 30th 2011, 8:57pm

Cool danke!

Und wie weiß man welche "Ebene" (ich nenne das jetzt mal so) man Nutzen soll?
Also wann sollte man HKEY_CLASSES_ROOT, wann HKEY_CURRENT_USER, wann HKEY_LOCAL_MACHINE, wann HKEY_USERS und wann HKEY_CURRENT_CONFIG verwenden?
Von HKEY_CURRENT_USER kann man es sich ableiten. - denke ich.
Ich interpretiere das so, dass der momentane Nutzer, wir nennen ihn mal NutzerA, dieses Programm verwenden kann, da in seiner "Ebene" die notwendigen Keys sind.
Also kann NutzerB nicht das Programm verwenden oder vollständig verwenden, was NutzerA jedoch kann.
Bei HKEY_LOCAL_MACHINE haben NutzerA als auch NutzerB darauf Zugriff, oder?
Doch bei dem anderem bin ich mir unsicher. Da ist die Spekulation zu groß, zu mal man nie spekulieren sollte. *g*

MfG
Check

6

Thursday, June 30th 2011, 9:38pm

Auf die Registry hast du als Programmierer eigentlich immer vollen bzw zum großen Teil Zugriff. (Ich glaub seit Vista ist es noch stärker an Rechte gebunden)

In HKEY_USERS werden die Registryeinstellungen (nach UserID) aller Benutzer gespiechert, die Registry des aktuell eingelogten Benutzers wird zusätzlich auf HKEY_CURRENT_USER "gemappt" (gespiegelt).
In HKEY_LOCAL_MACHINE werden die globallen Benutzereisntellungen gespiechert.

In HKEY_CLASSES_ROOT und HKEY_CURRENT_CONFIG am besten gar nicht herumpfuschen, da sind Hardwareeinstellungen sowie Interfaceverknüpfungen und Einstellungen gespeichert.

Um deine Einstellungen zu spiechern solltest du am besten die folgenden zwei Ordner verwenden (in diesen ein Unterordner erstellen, mit deinem "Namen"):
HKEY_LOCAL_MACHINE\SOFTWARE
HKEY_CURRENT_USER\Software

Mfg Rushh0ur

Social bookmarks