Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [C] Cancellare una chiave di registro

    Ciao ragazzi!
    Innanzi tutto, BUON NATALE A TUTTI!!!

    Ragazzi, io sto provando a cancellare una chiave di registro che so per certo esistere, ho cercato sul sito msdn il codice e ho provato a usarlo, arrivando a un programmino così

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main()
    {
    	HKEY key;
    
        RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion",0,KEY_SET_VALUE,&key);
    	RegDeleteKey(key,"chiave");
    	RegCloseKey(key);
    	return 0;
    }
    che dice che è correttamente compilato e tutto...peccato che non mi cancelli la chiave...come faccio???dov'è l'errore?

  2. #2
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    non sono sicuro e sono ancora un principiante.... però credo che non devi aprire la chiave di registro, cancellarla e poi chiuderla.. credo che la devi cancellare direttamente...

  3. #3
    ho provato, ma non va lo stesso...zio bill dice che devo aprirla e cancellarla...aiutooooooooooooooo!

  4. #4
    Esamina i valori di ritorno delle varie funzioni che richiami per sapere dov'è il problema.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    ehm...cioè? come devo fare?

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Azz...

    dunque, il valore di ritoron di una funzione...

    Una funzione esegue una tua serie di istruzioni e ritorna qualcosa, un puntatore, un intero, qualsiasi cosa...
    Cosa ritorna è specificato dal prototipo, all'inizio

    codice:
    int foo(void)
    Significa che la funzione ritorna un intero e non prende nessun argomento.
    Esaminare i valori di ritorno significa vedere cosa ritorna questa funzione...
    Di solito si usa ritornare 0 se tutto è andato bene, 1 o -1 se non è andata bene.
    Tu quindi dovresti fare,ad esempio
    codice:
    if (RegDeleteKey(key,"chiave")) == 0)
    //Tutto ok
    else
    //Niente da fare.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Originariamente inviato da =tW=
    ehm...cioè? come devo fare?
    Non sei molto familiare con le API vedo... Be', mettiamola così: la maggior parte delle API, per indicare se l'operazione che dovevano portare a termine è andata per il meglio restituiscono un codice di errore come valore di ritorno; quindi fai così:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main()
    {
    	HKEY key;
    	LONG dwRes;
        	dwRes=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion",0,KEY_SET_VALUE,&key);
    	if(dwRes!=ERROR_SUCCESS)
    	{
    		printf("Errore %d durante l'apertura della chiave.",dwRes);
    		return 1;
    	}
    	dwRes=RegDeleteKey(key,"chiave");
    	if(dwRes!=ERROR_SUCCESS)
    	{
    		printf("Errore %d durante la chiusura della chiave.",dwRes);
    		return 2;
    	}
    	dwRes=RegCloseKey(key);
    	if(dwRes!=ERROR_SUCCESS)
    	{
    		printf("Errore %d durante la chiusura della chiave.",dwRes);
    		return 3;
    	}
    	return 0;
    }
    Quindi esamina gli eventuali codici di errore e confrontali con quelli definiti in winerror.h.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    ah, ho capito, cm quando voglio sapere la lunghezza di una stringa tramite printf :-D grazie mille, provo subito

  9. #9
    ok, mi da errore 2, ho stampato direttamente l'dwRes...dove posso controllare che errore è? perchè in windows.h non c'è, sono solo poche righe di istruzioni al precompilatore...

  10. #10
    L'errore 2 è "Impossibile trovare il file specificato"; quale delle tre chiamate a funzione ti restituisce l'errore? In effetti se fosse la RegDeleteKey avrebbe più che senso (significherebbe che non può eliminare la chiave HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\Chiave perché essa non esiste)...
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.