Zugriff auf die Registry



  • 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


Anmelden zum Antworten