IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

problème de lecture base de registre


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 18
    Points
    18
    Par défaut problème de lecture base de registre
    Bonjour,

    j'ai un problème avec la lecture dans une base de registre, mon code fonctionne bien quand le type de valeur est REG_SZ, mais il ne fonctionne pas quand il est de type REG_DWORD

    le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    HKEY hKey = NULL; 
    long lResult; 
    DWORD type, size=100;
     
     
    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0, KEY_QUERY_VALUE,&hKey); 
    if (lResult != ERROR_SUCCESS) 
    { 
       return false; 
    } 
    lResult = RegQueryValueEx( hKey, "~MHz", NULL, &type, (unsigned char *)buff, &size ); 
    if ( lResult != ERROR_SUCCESS) 
    { 
       return false; 
    } 
     
    MessageBox(buff
     
    RegCloseKey(hKey);
    Ma MessageBox me renvoie des carctères bidon au lieu de la valeur réelle

    Si vous avez une solution...


    Merci!

    @+

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Euh, si la valeur est REG_DWORD, c'est un nombre non ?
    Fait un sprintf(tmp, "%u" buff);
    puis MessageBox(tmp
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Salut à tous!

    En reprenant les variables de ton code, pour lire un DWORD avec RegQueryValueEx if faut :
    1 - mettre REG_DWORD dans la variable type
    2 - mettre dans sizeof(DWORD) dans size
    3 - T'assurer que la taille de buff est au moins égale à sizeof(DWORD)
    4 - Appeller RegQueryValueEx comme tu le fais
    5 - Pour lire la variable en cas de succès de l'appel n'oublie pas de faire un cast :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DWORD d = (DWORD) (*buff);

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    merci pour votre aide mais j'ai encore un problème...

    maintenant mon code ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    HKEY hKey = NULL; 
    long lResult; 
    DWORD type, size=100;
     
     
    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0, KEY_QUERY_VALUE,&hKey); 
    if (lResult != ERROR_SUCCESS) 
    { 
       return false; 
    } 
    lResult = RegQueryValueEx( hKey, "~MHz", NULL, &type, (BYTE *)buff, &size ); 
    if ( lResult != ERROR_SUCCESS) 
    { 
       return false; 
    } 
     
    DWORD d = (DWORD) *buff;
     
    sprintf(buff,"%u",d);
    MessageBox(buff);
     
    RegCloseKey(hKey);
    La valeur affichée est 90 alors que normalement ça devrait me renvoyer 2394 (ou 95a en hexa).

    Or avant ça me renvoyait le caractère "Z" qui comme par magie correspond à 5a en hexa (code ASCII)...

  5. #5
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Quand tu fais
    Citation Envoyé par pafounet3
    lResult = RegQueryValueEx( hKey, "~MHz", NULL, &type, (BYTE *)buff, &size );
    Quelle est la valeur de type ?

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Dans type je récupère 4

  7. #7
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Salut,
    Je ne demandais pas la valeur de retour, mais la valeur avant l'appel
    Il faut faire avant l'appel

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    j'ai essayé ça ne marche pas mieux

  9. #9
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    essaye çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    HKEY hKey = NULL;
    long lResult;
    char buff[100];
    DWORD type, size=sizeof(DWORD), value;
     
     
    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0, KEY_QUERY_VALUE,&hKey);
    if (lResult != ERROR_SUCCESS)
    {
       return ;
    }
    type = REG_DWORD;
    lResult = RegQueryValueEx( hKey, "~MHz", NULL, &type, (unsigned char *)&value, &size );
    if ( lResult != ERROR_SUCCESS)
    {
       return ;
    }
     
    sprintf(buff,"%u",value);
    AfxMessageBox(buff);
     
    RegCloseKey(hKey);
    J'ai simplement appliqué les recommandations de abelman
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  10. #10
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Je viens de tester le code mis par Trap D sous visualC++6 sp5.
    J'obtiens à chaque fois le bon résultat en lisant un entrée REG_DWORD de la registry. Tu le prend comme tel et il marche ce bout de code

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup!!!!


    ça marche!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Ecriture/Lecture base de registre
    Par Shifty_ dans le forum C#
    Réponses: 4
    Dernier message: 17/04/2009, 13h27
  2. Problème installation logiciel (Base de registre)
    Par mousyas dans le forum Windows Vista
    Réponses: 0
    Dernier message: 06/04/2009, 16h13
  3. Problème avec la base de registre et vista
    Par fredppp dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 12/06/2007, 08h33
  4. Problème avec la base de registre
    Par The_programmeurdu76 dans le forum MFC
    Réponses: 1
    Dernier message: 30/05/2007, 18h45
  5. Lecture base de registre client
    Par locs dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 02/02/2007, 10h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo