Zugriff auf die Registry
-
Naja kenn mich nicht so gut aus. Jedenfalls hab ich bis jetzt das:
HKEY hKey = HKEY_LOCAL_MACHINE; LPCTSTR lpSubKey = "Software\\MyCompany\\MyProduct"; DWORD ulOptions = 0; REGSAM samDesired = KEY_READ; PHKEY phkResult = 0; long bla = RegOpenKeyEx(hKey, lpSubKey, ulOptions, samDesired, phkResult);Wie bekomme ich jetzt da den Path?
-
Im letzten Parameter bekommst du doch den Handle auf deinen Registry-Eintrag zurück. Den kannst du verwenden, um weiter durch die Registry zu navigieren.
Btw würde ich dort eher die Adresse eines exisiterenden HKEY angeben als einen NULL-Pointer:
... HKEY key; RegOpenKeyEx(...,&key);
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ 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.
-
Habs jetzt geändert anhand eines Beispiels, das ich hier im Forum gefunden habe. Sieht jetzt so aus:
LONG lnResult; HKEY hKey; bool bla; bla = false; lnResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Mycompany\\MyProduct\\Path", 0, KEY_READ, &hKey); if ( ERROR_SUCCESS != lnResult ) { bla = true; }hKey bleibt aber immer leer bzw es steht ????? drin. Warum? Ist die RegistryPfad-Angabe falsch?
Übrigens, warum kann ich auf bla keinen quickWatch machen?
-
Damit öffnest Du ja nur den Key... lesen musst Du noch separat: RegQueryValueEx
PS: Warum nimmst Du nicht die Funktionen aus dem .NET-Framework (Microsoft.Win32.Registry)?
-
Das Programm muss ohne der .net Umgebung lauffähig sein deshalb.
Ich blick da einfach nicht durch. Hat denn keiner nen Schnipsel in der er z. B. einen Installpath eines Programms in einen String einliest?
-
DWORD dwType; TCHAR szValue[100]; DWORD dwSize = sizeof(szValue)*sizeof(TCHAR); LONG lRet = RegQueryValueEx(hk, _T("ValueName"), NULL, &dwType, (LPBYTE) szValue, &dwSize); if ( (lRet == ERROR_SUCCESS) && ( (dwType == REG_SZ) || (dwType == REG_EXPAND_SZ)) ) { // Wert erfogreich gelesen... }
-
Funzt bei mir nicht.
dwType enthält immer 2147483650
szValue immer ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
-
Und was enthält "lRet" ?
-
Da passt der Wert. Der ist 2.
-
Ich wollte das Thema nochmal aufgreifen weils ziemlich wichtig ist, dass ich da eine Lösung find.
Hat denn keiner einen Rat?
-
hier suche ich nach dem standardwert für die dateierweiterung ".c", wenn du einen speziellen key suchst, ersetze "" durch "blablub". das war mein erster versuch, aus der reg zu lesen, und dank eurer snippets kein problem. thx.
vielleicht läuft das ja bei dir bzw hilft weiter.//--------------------------------------------------------------------------- //.....('`-''-/').?_..--'''`-._ //.....`6_.6..)...`-...(.....).`-.?.-`) //.....(_Y_.)'..._...)..`._.`..``-..--' //..._..`--'_..-_/../--'_.'.,' //..(il),-''..(li),'..((!.- //--------------------------------------------------------------------------- #include<windows.h> #include<stdio.h> // für printf, #include<conio.h> //--------------------------------------------------------------------------- int main(int argc, char* argv[]) { int long lnResult; HKEY hKey=NULL; lnResult=RegOpenKeyEx(HKEY_CLASSES_ROOT,".c", 0,KEY_READ,&hKey); if(!hKey){MessageBox(NULL,"RegOpenKeyEx failed","",MB_OK);return -1;} DWORD dwType; TCHAR szValue[100]; DWORD dwSize = sizeof(szValue)*sizeof(TCHAR); LONG lRet = RegQueryValueEx(hKey, "", NULL, &dwType, (LPBYTE) szValue, &dwSize); // ersetze "" durch "blablub" if ( (lRet == ERROR_SUCCESS) && ( (dwType == REG_SZ) || (dwType == REG_EXPAND_SZ)) ) { printf("%s",szValue); } else {MessageBox(NULL,"RegQueryValueEx failed","",MB_OK);return -1;} getch(); return 0; } //---------------------------------------------------------------------------grüße, die katz
-
Jetzt gehts. Vielen Dank