C++ Registry-Einträge auslesen

wakünick

Lt. Junior Grade
Registriert
Dez. 2006
Beiträge
311
Hallo CBler,

Ich möchte gerne mit C++ einen Wert aus der Registry auslesen, bisher jedoch ohne Erfolg.
Da ich bisher nochnie das Vergnügen mit Registry-Einträgen unter c++ hatte, wäre ich euch über eine allgemeine Erklärung sehr dankbar!:)

Der registry Wert soll einer unsigned int Variable übergeben werden
...
Der Pfad ist dieser: "hkey_current_user\Software\CPUID\HWMonitor\VistaSidebar"

Der Schlüssel dieser: "T[CORE#0-0]"

Ich benutze Visual C++ Express 2010

Meine "googlei" ergab zwar hinweise, tipps etc, jedoch blieb es ohne Erfolg beim Ausprobieren von diesen (z.B. RegOpenKey-Function)

Bin euch über eure Hilfe im Vorraus dankbar

Gruß
 
@Blitzmerker
bisher nicht...über ein Beispiel wäre ich dir auch sehr dankbar, da es bei mir spätestens bei der übergabe/umwandlung der Werte scheitert!
"Applications should use the RegQueryValueEx function." steht in deinem Link, wie sieht es also mit diesem Befehl aus? Wie muss ich den nun wieder ins Programm schreiben?

@asdfman
Was meinst du damit?
 
Code:
HANDLE hkey=0;
int data=0;
DWORD type=0;
int size=sizeof(data);
RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\CPUID\\HWMonitor\\VistaSidebar",0,KEY_ALL_ACCESS,&hkey);
RegQueryValueEx(hkey,"T0",0,&type,&data,&size,);
cout<<data;
RegCloseKey(hkey);
Also soo schwer ists nicht, einfach brav allen Links folgen... :)
 
Danke schonmal für deine Hilfe!
wollte den Key jetzt einfach mal ausgeben:

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<Winreg.h>

int main (void)
{
HANDLE hkey=0;
int data=0;
DWORD type=0;
int size=sizeof(data);
RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\CPUID\\HWMonitor\\VistaSidebar",0,KEY_ALL_ACCESS,&hkey);
RegQueryValueEx(hkey,"T0",0,&type,&data,&size,);
printf("%c",data);
RegCloseKey(hkey);
}



Leider bekomme ich jetzt folgende Fehlermeldung:



1>------ Erstellen gestartet: Projekt: Projekt-Arbeit, Konfiguration: Debug Win32 ------
1> Main.cpp
1>c:\users\X\desktop\schule\visual\X\projekt-arbeit\main.cpp(12): error C2664: 'RegOpenKeyExW': Konvertierung des Parameters 2 von 'const char [38]' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>c:\users\X\desktop\schule\visual\X\projekt-arbeit\main.cpp(13): error C2059: Syntaxfehler: ')'
1>c:\users\X\desktop\schule\visual\X_X_3\projekt-arbeit\main.cpp(15): error C2664: 'RegCloseKey': Konvertierung des Parameters 1 von 'HANDLE' in 'HKEY' nicht möglich
1> Konvertierung von 'void*' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlung
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Diese hatte ich auch schon bei meinen letzten Versuchen:(
 
Zuletzt bearbeitet:
Hier mal ein Beispiel, welches für Unicode und Multibyte funktionieren sollte:
Code:
#include <iostream>
#include <string>
#include <conio.h>
#include <windows.h>
using namespace std;

int main()
{
	HKEY hKey;
	string strKeyPath = "Software\\CPUID\\HWMonitor\\VistaSidebar";
	string strKeyName = "T[CORE#0-0]";
	DWORD dwValueType;
	byte byteValue[50];
	DWORD dwValueSize;
	
	if( RegOpenKeyExA(HKEY_CURRENT_USER, strKeyPath.c_str(), 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS )
	{
		cout << "ERROR - Unable to open the key!";
		_getch();
		return -1;
	}

	if( RegQueryValueExA(hKey, strKeyName.c_str(), NULL, &dwValueType, byteValue, &dwValueSize) != ERROR_SUCCESS )
	{
		cout << "ERROR - Unable to get the key's value!";
		_getch();
		return -1;
	}

	unsigned int uiValue = atoi((char*)byteValue);

	cout << "Value: " << uiValue << endl;

	RegCloseKey(hKey);

	cout << endl << "Press any key to exit . . . ";
	_getch();
	return 0;
}

Gruß
BlackMark
 
Zuletzt bearbeitet:
Zurück
Oben