regedit änderung...mit c++



  • REG_SZ (CString)und REG_DOWRD(DWORD) ändern ist einfach...
    strDatax; <- der soll Binärwerte annehmen.

    //  BINARY strDatax; <-- problem !!! 
        DWORD   dwSize = 1024;
        DWORD   dwType;
    
        lxReturn = RegQueryValueEx( hKey,
                                   _T("SendUserGUID"),
                                   0,
                                   &dwType,
                                   (BYTE *)strDatax.GetBufferSetLength((int)dwSize),
                                   &dwSize );
    


  • Was ist jetzt die Frage?
    Blub?

    std::vector<uint8_t> (bzw. char, unsigned char, BYTE - was dir am besten reinpasst)?
    Oder CArray<BYTE> (oder char, ...)?

    Im Prinzip kannst du an RegQueryValueEx als "Ziel" alles übergeben was auch bei memcpy als "Ziel" OK wäre.



  • DWORD dwType = REG_BINARY;   
         double d;   
         DWORD dwSize = sizeof(d);   
       HKEY hKey;   
    
    LONG lxReturn = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                 _T("Software\\Microsoft\\MediaPlayer\\Preferences"), 0,   
            KEY_READ, &hKey) ;  
    
    if( lxReturn == ERROR_SUCCESS )
    {
    
        lxReturn = RegQueryValueEx(hKey, _T("SendUserGUID"), NULL,   
    		&dwType, (LPBYTE)&d, &dwSize)  ;
    
                    if( lxReturn == ERROR_SUCCESS )
    				{
    				 m_send = "alles ok";
    				UpdateData(FALSE);
    				}
    

    Auf ein neues 🙂
    m_send = "alles ok"; <- kommt nicht zur stande,warum?
    ich will wissen ob ...SendUserGUID 00 oder 01 ist?
    Der Compiler bringt keinen Fehler.
    Wer findet den Fehler 🙂



  • Du solltest zuerst die Länge des "REG_BINARY" abfragen, dann kannst du die Korrekte Länge an RegQueryValueEx übergeben.
    Und double als Datentyp ist Unsinn wenn du ein einfaches Byte abfragen willst.



  • kann nicht gehen, weil..

    HKEY_LOCAL_MACHINE ist falsch.
    sondern....
    HKEY_CURRENT_USER 🙂

    jetzt hab ich ein anderes Problem

    SendUserGUID hat den Binärwert 00 und soll per funktion 01 bekommen.

    wenn ich folgendes ausführe...

    CString funkname = "SendUserGUID";
    BYTE dwNumber= 01;
    
    RegSetValueEx(hKey,funkname,0,REG_BINARY,(BYTE*)&dwNumber,sizeof(DWORD));
    

    ... hat SendUserGUID den Wert 01 cc cc cc
    ich will aber 01 im regedit haben ?!
    oder kann ich den Wert so lassen?



  • hehehe hab hinbekommen.

    RegSetValueEx(hKey,funkname,0,REG_BINARY,(BYTE*)&dwNumber,sizeof(BYTE));
    


  • CString funkname = "SendUserGUID";
    BYTE dwNumber= 01;
    RegSetValueEx(hKey,funkname,0,REG_BINARY,(BYTE*)&dwNumber,sizeof(BYTE));
    

    allerletzte Frage...

    ich will 0a 00 00 00 als Wert haben
    Dummerweise bekommme ich jetzt maximal FF aber keinen höheren Wert zugewiesen


Anmelden zum Antworten