Registry Key löschen - !!Help!!



  • Hallo,

    ich habe mal wieder ein Problem:

    CString path = "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\" + drive[index].DriveletterOnly + "\\DefaultLabel"; 
    MessageBox(path); 
    if(RegDeleteKey(HKEY_CURRENT_USER, path) != ERROR_SUCCESS){ 
        MessageBox("Fehler"); 
    }
    

    In drive[index].DriveletterOnly steht ein Laufwerksbuchstabe ohne alles z.B. "S", definiert als CString.
    Der Pfad den ich löschen will lautet also:
    \SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\S\DefaultLabel
    So wird es auch in der MessageBox ausgegeben.
    Aber löschen kann er ihn nicht, obwohl er keine Unterschlüssel hat. -> ???

    Kann mir dass bitte mal jemand erklären?

    mfg
    trequ



  • Lass mal das \\ vor Software weg (steht zumindest ohne in den FAQ) 🙂 Ansonsten:

    If the function fails, the return value is a nonzero error code defined in Winerror.h. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error.



  • Hallo,

    wenn ich \\ weglasse, geht es auch nicht.

    Ich soll das verwenden?
    http://msdn.microsoft.com/library/en-us/debug/base/formatmessage.asp

    Ich mache C++ seit etwa 2 Wochen.
    Ich bin froh, dass ich jetzt endlich den Unterschied zwischen Char und CString begriffen habe.
    Was ist das denn bitte: FormatMessage(DWORD,LPCVOID,DWORD,DWORD,LPTSTR,DWORD,va_list) !?!?!?!

    Gibt es nicht einfach sowas wie MessageBox(<gib den letzten Fehler aus>); ??
    Es gibt ja GetLastError. Warum kann ich den nicht einfach in eine MessageBox packen ??

    Das kann ja nicht sein... das Beispiel in der MSDN crasht bei mir die ganze Anwendung...
    "Der Vorgang read konnte nicht im Speicher 0x???? durchgeführt werden" -> wtf?!?

    Werde noch verrückt mit den ganzen Datentypen... 😕

    mfg
    trequ



  • *push*



  • Was gibt den RegDeleteKey für einen Wert zurück oder GetLastError?



  • Wenn du den Zahlenwert hast, dann kannst du auch hier nachschauen 🙂



  • Hallo,

    ich mache C++ noch nicht so lange...
    Ich bin Umsteiger aus Perl und habe extreme Probleme mit den Datentypen.

    RegDeleteKey(...) gibt ERROR_SUCCESS zurück, wenn erfolgreich:

    if(RegDeleteKey(...) != ERROR_SUCCESS){
        // Gib Fehler aus
    }
    

    Aber das mit dem GetLastError() begreife ich einfach nicht...
    Diese Datentypen werden in keinem meiner C++ Bücher erklärt. DWORD, LPSTR 😮 - was ist das denn?

    flenders schrieb:

    Wenn du den Zahlenwert hast, dann kannst du auch hier nachschauen 🙂

    Sorry, hier habe ich bereits ein Problem:
    1. Woher kriege ich den Zahlenwert? 😕
    2. Zahl ist doch vom Typ int, oder? Aber wie komme ich da ran?

    int fehler;
    <lese fehler in int fehler ein>
    MessageBox(fehler);
    

    Geht nicht. Ich kann keinen einzigen int ausgeben. 😮 😕 😞 👎

    Warum -> keine Ahnung.

    mfg
    trequ



  • DWORD, LPSTR sind Datentypen von Windows.

    Auf einem Windows 32Bit und 32Bit Prozessor:
    DWORD = unsigned long
    LPSTR = char *

    int ist ja eine Zahl und kein Text 🙂 Du musst die Zahl erst in einen Text umwandeln um sie Anzeigen zu können



  • trequ schrieb:

    Aber das mit dem GetLastError() begreife ich einfach nicht...
    Diese Datentypen werden in keinem meiner C++ Bücher erklärt. DWORD, LPSTR 😮 - was ist das denn?

    MSDN: Windows Data Types

    trequ schrieb:

    Sorry, hier habe ich bereits ein Problem:
    1. Woher kriege ich den Zahlenwert? 😕
    2. Zahl ist doch vom Typ int, oder? Aber wie komme ich da ran?

    Das ist der Rückgabewert von GetLastError - ein DWORD (ist aber ja eigentlich ein int 😉 ):

    DWORD retVal = GetLastError();
    

    Diesen kannst du dir jetzt entweder über den Debugger deiner IDE anschauen, oder eben in einen String (z.B. mit atoi oder wsprintf) umwandeln und in einer MessageBox ausgeben.


Anmelden zum Antworten