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

Windows Discussion :

[C++]Problème clé de registre


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut [C++]Problème clé de registre
    Bonjour,
    Afin d'afficher automatiquement les traces de la souris, j'ai écrit une petite fonction chargée de poser un clé de registre dans la clé "Mouse" du "Control Panel" de la base de registre.
    En sachant que pour afficher les traces de la souris, il faut que la chaine MouseTrails est une valeur de "7", j'ai adapté ma fonction à cet effet.
    La fonction fonctionne bien, MouseTrails vaut "7" et pourtant il ne se passe rien !
    J'afface tout, dans le panneau de config je regle manuelement les propriétés de la souris pour afficher les traces, MouseTrails passe à "7", mais la ca marche !
    Il y a t'il autre chose à faire ? Disposer des droits de l'admin peut-être ? Comment faire ?
    Voila, merci !

    ah au fait ma fonction :
    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
    int MouseTrails()
    {
        #define KEY_MOUSE  "Control Panel\\Mouse"
        #define VAL_MOUSE  "MouseTrails"
    
        HKEY    hKey;
        
        if (RegOpenKey(HKEY_CURRENT_USER, KEY_MOUSE, &hKey) != ERROR_SUCCESS)
            if (RegCreateKey(HKEY_CURRENT_USER, KEY_MOUSE, &hKey) != ERROR_SUCCESS)
    			return 0;
    
        unsigned char val[10] = "7";
        RegSetValueEx(hKey, VAL_MOUSE, 0, REG_SZ, val, sizeof(val));
        
        RegCloseKey(hKey);
    
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Non, ça n'a pas l'air d'être un problème de droits : C'est dans HKEY_CURRENT_USER après tout.

    Peut-être qu'il faut que la taille passée soit la bonne,
    Et peut-être qu'il faut préciser RegSetValueExA() pour montrer que la chaîne n'est PAS en unicode...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Comment fait-on pour passer une "bonne taille" ?
    J'ai fais un test :
    Dans le panneau de config j'affiche les traces de la souris.
    J'ouvre regedit, MouseTrails est passé à "7" ( pas "7 " ou " 7").
    Je le met manuelement à zero.
    Les traces continuent de s'afficher.
    C'est bizzar quand même.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Je pense qu'il faut quelque chose de plus pour que le changement soit pris en compte. Un truc pour "actualiser"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    ben je pense pas, ca fais déjà pas mal de temps que je bidouille dans la base de registre, je n'ai jamais eus besoin d'actualiser quoi que ce soit. Ceci dit tu à peut-etre raison. Peut-être qu'une seconde clé est inscrite, pour 'confirmer'.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Apparamment tu as raison, il faut bien un mise à jour de la base de registre :
    après avoir reglé la clé avec ma fonction, j'ai redémarré mon PC et après ca fonctionnait sans problème.
    La question maintenant est : comment mettre la bdr à jour sans avoir à redémarrer l'ordinateur ? Car le panneau les réglages du panneau de congiguration ne nécessitent pas de redémarrage.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    J'avais eu le même genre de problème quand je voulais changer l'arrière-plan d'active desktop, je m'en suis sorti en utilisant COM : L'interface IActiveDesktop avait une méthode pour changer l'arrière-plan et une autre pour appliquer les changements.

    Mais pour la souris, aucune idée...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Queque COM ? Et quelle était cette méthode pour appliquer les changements ?
    Pour trouver la deuxieme méthode qui fait la différence, j'ai pensé à exporter les clés du panneau de configuration en fichier .reg, puis refaire de même mais en ayant modifier la comportement de la souris dans le panneau de configuration. Il faurdrait ensuite trouver un moyen de les comparer pour trouver la( ou les ?) clé qui aurait changée.
    Y aurait-il un moyen de faire ca ?
    Merci beaucoup pour ton aide, car personne d'autre n'a l'air de pouvoir m'aider.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    COM, c'est une philosophie de Windows qui permet de faire des objets C++ utilisables depuis le C.
    On accède aux objets par des interfaces, et on les crée par leur CLSID (un truc sous la forme {88888888-4444-4444-4444-121212121212}), et le système se charge de trouver dans quelle DLL se trouve l'objet.

    Sous Windows, tu as l'interface IActiveDesktop déclarée dans <shlobj.h> (je crois bien que cette interface n'est pas dans les headers de MinGW, par contre), ainsi que les IDs CLSID_ActiveDesktop et IDD_IActiveDesktop
    On pouvait jouer avec comme ça:
    http://msdn.microsoft.com/library/de...ivedesktop.asp

    Malheureusement, je ne pense pas que la méthode IActiveDesktop::ApplyChanges() agisse sur les caractéristiques de la souris. Mais tu peux toujours essayer...



    PS: Une simple recherche de "Mouse trails" sur MSDN me donne un lien vers SystemParametersInfo(SPI_SETMOUSETRAILS,...) : Cette fonction devrait faire ce que tu veux.
    On ne peut pas vraiment dire que tu aies cherché...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    euh... j'avoue que je n'y avait pas pensé... Je pensais que la solution était dans la base de registre.
    Merci pour tona aide.

  11. #11
    Membre actif Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Points : 252
    Points
    252
    Par défaut
    Sinon pour voir ce qui entre <-> sort de bdr tu as Regmon, c'est assez pratique pour voir ce qui ce passe.

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Mais là, je pense que le problème n'était pas dans la modification de la BDR, mais dans le fait de forcer le système à relire ce qui a été changé dans la BDR.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre actif Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Points : 252
    Points
    252
    Par défaut
    Citation Envoyé par The Lord of Nesquik
    Queque COM ? Et quelle était cette méthode pour appliquer les changements ?
    Pour trouver la deuxieme méthode qui fait la différence, j'ai pensé à exporter les clés du panneau de configuration en fichier .reg, puis refaire de même mais en ayant modifier la comportement de la souris dans le panneau de configuration. Il faurdrait ensuite trouver un moyen de les comparer pour trouver la( ou les ?) clé qui aurait changée.
    Y aurait-il un moyen de faire ca ?
    Merci beaucoup pour ton aide, car personne d'autre n'a l'air de pouvoir m'aider.
    C'était juste à titre informatif

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ah OK compris
    Je parle trop moi.

    De mon côté, je n'avais pas vraiment "Utilisé COM" : J'avais utilisé un composant COM mis à disposition par Windows pour changer l'arrière-plan.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Problème base de registre
    Par justgreat dans le forum Windows
    Réponses: 1
    Dernier message: 11/05/2010, 15h17
  2. Problème avec le registre d'état avec inpout32.dll
    Par tims12 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/08/2009, 14h53
  3. problème avec des registres
    Par bentley71de dans le forum C
    Réponses: 0
    Dernier message: 31/07/2008, 14h51
  4. problème avec le registre
    Par akli_agha dans le forum Windows XP
    Réponses: 6
    Dernier message: 07/10/2006, 10h11
  5. Problème de lecture registre avec RegEnumKeyEx
    Par mdriesbach dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 28/10/2005, 11h27

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