Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème pour utiliser RegOpenKey

    10 août 2006 à 11:41:40

    Bonjour tout le monde,

    Je voudrais donc pouvoir lire et écrire dans le registre. Apparament, il faut utiliser RegOpenKey, donc j'ai trouvé sa doc ici, et j'ai essayé de faire un bout de code ... :

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>

    int main(int argc, char *argv[])
    {
      LPCTSTR chemin="Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer";
      LPCTSTR cle="NoDrives";
     
     
      PHKEY resultat;
     
      RegOpenKey(HKEY_CURRENT_USER, chemin, resultat);
     
      printf("Adresse de la variable contenant le resultat : %ld\n\n", resultat);
     
      if (*resultat==ERROR_SUCCESS)
      {
        printf("RegOpenKey OK\n\n");
      }
      else
      {
        printf("RegOpenKey PAS OK\n\n");
      }
     
      system("PAUSE");     
      return 0;
    }


    Je pense que j'ai remplis les trois arguments comme il faut, et donc si tout se passe bien, d'après la doc, ça devrais renvoyer "ERROR_SUCCESS", mais ça ne renvois pas ça ... je me suis planté où ?

    Merci.
    Pierre.
    • Partager sur Facebook
    • Partager sur Twitter
      10 août 2006 à 12:23:33

      1. Pourquoi aire des variables alors que tu as juste à spécifier directement les chemins d'accès ?
      2. Pourquoi utiliser PHKEY au lieu de HKEY ?
      3. A ce moment là on pourrait ne pas déréférencer résultat...

      Bref bref bref : utilise plutôt une HKEY normale et tu passes son adresse à regopenkey.

      Ou alors 5. attends mon tuto qui est en train d'être validé :)

      Bon au cas où cela ne soit pas compréhensible :
      #include <windows.h>

      int main(int argc, char *argv[])
      {
        HKEY resultat;
       
        RegOpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", &resultat);
       
        if (resultat==ERROR_SUCCESS)
          printf("RegOpenKey OK\n\n");
       
        else
          printf("RegOpenKey PAS OK\n\n");
       
        RegCloseKey(resultat);
        getchar();     
        return 0;
      }


      [edit] Je viens de m'en rendre compte ... TOUJOURS fermer la clé !
      • Partager sur Facebook
      • Partager sur Twitter
        10 août 2006 à 12:46:19

        Salut, merci pour ta réponse.

        1. Je viens d'essayer de lu mettre directment l'adresse dans passer par la valiable, aucune erreur à la compilation, mais le programme plante ... :
        RegOpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", resultat);

        2. Pourquoi utiliser PHKEY au lieu de HKEY ? => C'est le type de variable spécifié dans la doc de crosoft, et si je met une HKEY, à la compilation, il me dis que le type de pointeur est incompatible.

        3. A ce moment là on pourrait ne pas déréférencer résultat... => euh, suis un poil largué là ... je commence tout juste le C.
        Déréférencer un pointeur, c'est à dire ? (c'est peut être juste un problème de vocabulaire que je ne comprend pas)

        "utilise plutôt une HKEY normale et tu passes son adresse à regopenkey" => une variable de type HKEY pour la variable chemin ?

        "Ou alors attends mon tuto qui est en train d'être validé :)"
        Sympas, je cherchais justement un tuto comme ça, tu pense qu'il sera validé dans combien de temps ?
        Sinon, est-ce que tu pourais me l'envoyer par MP ou par mail (pierre4012@hotmail.com) ?

        Merci.
        A+, Pierre.

        edit : Merci pour ton bout de code, mais il ne renvoit apparament toujours pas ERROR_SUCCESS.
        • Partager sur Facebook
        • Partager sur Twitter
          10 août 2006 à 12:50:29

          Bin je t'ai donné un code... il attend un PHKEY mais tu ne dois pas déclarer un PHKEY ! C'est celui ci qui va contenir l'adresse de ton HKEY, pour le modifier. C'est tout.

          [edit]J'ai bêtement recopié ton code en le changeant pour qu'il ne plante pas mais ... Réfléchis un peu !
          La clé elle même ne peut pas récupérer l'erreur ! C'est le return de la fonction qui renvoie l'erreur appropriée. Tu dois donc plutôt afficher ceci :
          (code en préparation)

          #include <windows.h>

          HKEY cle;

          fprintf(stderr, "Return : %s", (RegOpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", &cle)==ERROR_SUCCESS)?"Succès.":"Error");

          RegCloseKey(cle);
          getchar();

          return 0;
          • Partager sur Facebook
          • Partager sur Twitter
            10 août 2006 à 12:54:10

            OK, merci, apprament, tu l'a rajouté après que j'ai vu ton message originale, c'est pour ça.

            Mais, apparament, ça ne marche toujours pas, il ne renvoit pas ERROR_SUCCESS.

            Et pour ton tuto, est-ce que tu pourais me l'envoyer ?

            Merci.
            Pierre.

            edit : ah, ok, c'est bon, effectivement j'y avais pense à un moment ou tout plantais, mais je l'avais enlevé, merci.
            • Partager sur Facebook
            • Partager sur Twitter
              10 août 2006 à 12:58:08

              Là, normalement c'est bon. Si ça plante, cela sera dû à l'expression ternaire sans aucun doute. Tu n'auras alors jsute qu'à stocker le return dans une variable et à tester le résultat.
              • Partager sur Facebook
              • Partager sur Twitter
                10 août 2006 à 13:00:55

                OK, merci bien, j'ai tout bien compris et ça marche.

                Je vais maintenant essayer de lier et d'écrire.

                Sinon, ça te dérangerais pas de m'envoyer ton tuto ?
                • Partager sur Facebook
                • Partager sur Twitter
                  10 août 2006 à 13:04:22

                  Nt nt nt pas de privilégiés ;) Je l'ai proposé avant-hier matin, donc ne connassant pas la rapidité des validateurs... mais je peux te dire que les thèmes abordés sont :
                  - Associations de fichiers
                  - Changement d'icônes de fichiers
                  - Programme au démrrage de windows.

                  Tout ça, manuellement ou en code. Donc si tu n'y es pas pour le moment... mais par contre, si c'est autre chose tu peux dire ce que tu as l'intention de faire pour qu'on t'aide éventuellement.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 août 2006 à 13:07:24

                    Ah, ok, je croyais que c'étais un tuto sur le registre.

                    Merci pour ta proposition d'aide, je vais continuer mon code, effectivement je risque fort d'avoir encore besoin d'un peut d'aide.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 août 2006 à 13:08:57

                      C'est effectivement un tuto sur le registre, mais j'ai axés les objectifs sur ces thèmes.
                      D'ailleurs si tu as une autre idée, je me ferais un plaisir de le rédiger ;)

                      Et sinon pour l'aide ... à votre service ^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 août 2006 à 13:23:53

                        Ah ok, oulà, je fatigue aujourd'hui, effectivement tout ce que tu m'a décris se fait bien avec le registre ... j'imaginais autrement ...

                        Sinon, pour des idées, là justement je suis en train d'essayer de faire un programme pour pouvoir cacher un où plusieurs lecteurs du poste de travail avec la clé "NoDrives", mais sinon, pour rester dans le générale, je vois pas trop, il y as des tonnes de petites conneries à bidouiller...

                        edit : pour se servir de RegGetValue, est-ce qu'il faut avoir ouvert la clé avec RegOpenKey où est-ce qu'on peut le faire directement ?
                        Est-ce que tu pourais directement me donner un bout de code pour lire dans une clé existant, et un autre pour écrire dedans ?

                        Merci.

                        edit2: kitpaddle2, si t'a un peut de temps, ça ne te dérangerais pas qu'on se joignent par MSN ?
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Problème pour utiliser RegOpenKey

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown