Registry Wert ändern - Vorgehensweise?



  • RegOpenKeyEx(HKEY_CURRENT_USER, "AppEvents\\XXX_Key", 0, KEY_SET_VALUE, &hKey);
    


  • Hi, es geht leider immer noch nicht 😞



  • Dann benutze halt die CRegistry-Klase, die du auf meiner Homepage findest. Dann geht das so:

    CRegistry reg;
    reg.SetRoot(HKEY_CURRENT_USER);
    reg.OpenPath( TEXT("AppEvents\\XXX_Key") );
    
    TCHAR szValue[100];
    reg.ReadString(TEXT("EintragsName"), szValue, 100);
    


  • Du musst einfach das vierte Parameter von RegOpenKeyEx in KEY_READ ändern, dann klappt es. Sorry, das war mein Fehler, denn ich habe den Funktionsaufruf ja so gepostet. 😃

    Zeile 5 und 7 kannst du übrigens entfernen. Die brauchtst du in deinem Programm nicht!

    Mit freudlichen Grüßen

    WilMen



  • Also er zeigt jetzt nur noch ein Zeichen... Ein Smiley^^



  • Hallo xbug,

    also ich habe das Programm kompiliert und ausgeführt und alles hat geklappt. Ist der Schlüssel, dessen Wert du lesen möchtest, überhaupt schon erstellt?



  • Ja, ich habe es sogar mit einem anderen Key versucht 😞



  • #include <windows.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[]) 
    {
     HKEY hkey; 
    
     char szBuffer[255];
     char KeyValue[255] ;
    
     unsigned long lBufferSize = 255;
    
     RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, KEY_READ, &hkey) ;
     RegQueryValueEx(hkey, "MenuShowDelay", NULL, NULL, KeyValue, &lBufferSize) ;
     RegCloseKey(hkey) ; 
    
     printf("Wert des Schluessels: %s",KeyValue, "\n\nPress any key...") ;
     getchar() ;
    
     return (0);
    }
    

    Kompiler mal dieses Code. Ich habe ihn mit dem "Dev-C++ 4.9.9.2" kompiliert und es funktioniert!

    Sollte es jetzt immer noch nicht funktionieren, dann muss es am Compiler liegen!



  • 😞 😞 😞

    14 C:\Dokumente und Einstellungen\Admin\Desktop\read.cpp invalid conversion from `char*' to `BYTE*'



  • Probier es mit einem expliziten Typ-Casting!

    // ...
    
    RegQueryValueEx(hkey, "MenuShowDelay", NULL, NULL, (BYTE *) KeyValue, &lBufferSize) ;
    
    // ...
    


  • Juhu, es geht^^ Und weshalb ging es bei dir und bei mir nicht?



  • Mit welchem Compiler arbeitest du? 😕



  • Eigentlich Standard... Also schon bei Dev C++ mitgeliefert. Gibt es denn bessere Alternativen?



  • Ich arbeite, wie gesagt, mit dem gleichen! Keine Ahnung, wieso es bei dir nicht geklappt hatte.

    Für private Zwecke reicht der Dev-C++-Compiler aus. Ich habe außerdem noch nie von einem anderen kostenlosen Compiler gehört, der so gut ist. Du kannst also getrost mit ihm weiterarbeiten! 😉



  • Okay, danke!



  • WilMen schrieb:

    Für private Zwecke reicht der Dev-C++-Compiler aus. Ich habe außerdem noch nie von einem anderen kostenlosen Compiler gehört, der so gut ist. Du kannst also getrost mit ihm weiterarbeiten! 😉

    Oha! Also erstmal ist der DEV-C++ kein Compiler, sondern eine IDE. Der Compiler ist IMHO der MinGW. Und ja, es gibt viel bessere und auch kostenlose IDEs, z.B. Code::Blocks. Der DEV-C++ wird im übrigen schon seit längerem nicht mehr weiterentwickelt. Es ist also nicht angeraten, mit dem weiterzuarbeiten.

    @xbug: Hasu du wenigstens mal meine KLasse ausprobiert?



  • Hi,

    ja habe ich auch. Es kam aber folgende Meldung:

    54 C:\Dokumente und Einstellungen\Admin\Desktop\test.cpp syntax error  before `.' token
    


  • @WebFritzi

    Ja stimmt, hast recht! 🙄



  • xbug schrieb:

    Hi,

    ja habe ich auch. Es kam aber folgende Meldung:

    54 C:\Dokumente und Einstellungen\Admin\Desktop\test.cpp syntax error  before `.' token
    

    Das war dann dein Fehler, denn er taucht in deiner cpp-Datei und nicht in der CRegistry.cpp auf. Kann mir aber nicht denken, welcher. Ist ja auch klar. Woher soll ich wissen, was bei dir Zeile 54 ist...?



  • //---------------------------------------------------------------------------
    #ifndef CRegistryH
    #define CRegistryH
    //---------------------------------------------------------------------------
    #include <windows.h>
    //---------------------------------------------------------------------------
    
    // Possible types for values:
    //--------------------------------
    // REG_BINARY	            Binary data in any form.
    // REG_DWORD	            A 32-bit number.
    // REG_DWORD_LITTLE_ENDIAN  A 32-bit number in little-endian format (same as REG_DWORD). In little-endian format, the most significant byte of a word is the high-order byte. This is the most common format for computers running Windows NT and Windows 95.
    // REG_DWORD_BIG_ENDIAN	    A 32-bit number in big-endian format. In big-endian format, the most significant byte of a word is the low-order byte.
    // REG_EXPAND_SZ	    A null-terminated string that contains unexpanded references to environment variables (for example, “%PATH%”). It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions.
    // REG_LINK	            A Unicode symbolic link.
    // REG_MULTI_SZ	            An array of null-terminated strings, terminated by two null characters.
    // REG_RESOURCE_LIST	    A device-driver resource list.
    // REG_SZ	            A null-terminated string. It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions.
    
    // Notes on the write-functions:
    //-----------------------------------
    // - they overwrite any value careless of which type it may be
    // - they act as creating functions if the specified value does not exist
    //   therefore there is no need for functions to create values
    
    class CRegistry
    {
    public:
        CRegistry();
        ~CRegistry();
        BOOL SetRoot(HKEY hRootKey);
        // Path functions
        BOOL OpenPath(LPTSTR szPath, BOOL bCanCreate);
        BOOL ClosePath();
        BOOL PathExists(LPTSTR szPath);
        BOOL CreatePath(LPTSTR szPath);
        BOOL DeleteLastPathKey(LPTSTR szPath); // Deletes last key in szPath
        // Value functions
        BOOL ValueExists(LPTSTR szValName);
        BOOL GetValueSize(LPTSTR szValName, LPDWORD lpdwSize);
        BOOL GetValueType(LPTSTR szValName, LPDWORD lpdwType);
        BOOL WriteString(LPTSTR szValName, LPTSTR szValue);
        BOOL WriteDWORD(LPTSTR szValName, DWORD dwValue);
        BOOL ReadString(LPTSTR szValName, LPTSTR lpszRetVal, DWORD dwBufSize);
        BOOL ReadDWORD(LPTSTR szValName, LPDWORD lpdwRetVal);
        // Other functions
        LPTSTR GetLastError();
    };
    //---------------------------------------------------------------------------
    #endif
    //---------------------------------------------------------------------------
    
    CRegistry reg;
    reg.SetRoot(HKEY_CURRENT_USER);
    reg.OpenPath( TEXT("Console") );
    
    TCHAR szValue[100];
    reg.ReadString(TEXT("ColorTable04"), szValue, 100);
    

Anmelden zum Antworten