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

 C Discussion :

Comment intercepter une touche clavier avec un projet GUI


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Comment intercepter une touche clavier avec un projet GUI
    Bonjour a tous,

    Voila je vous explique,
    je souhaiterais afficher une MessageBox si un utilisateur appui sur la touche F8 par exemple. Mais avec le programme fonctionnant en fond de tache. J'ai creer un projet GUI. mais je ne sias pas par ou l'aborder.

    J'ai essayer de creer un service avec mon morceau de code en suivant le FAQ, mais rien ne se passe non plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     while(touche != 0x42)          //F8 pour quitter
        {
        Sleep(1);
     
        //Message de confirmation de l'appel.
       if (kbhit())
       {
         // touche = getch();
          etat = MessageBox(NULL,"It is a warning","Warning", MB_ICONWARNING | MB_YESNOCANCEL);
        }
        switch(etat) .....
    avec ce code la, je n'arrve a rien.

    en retirant le Kbhit(), mon messageBox s'affiche en boucle.

    Je pense qu'ilm me faut travailler avec interruption ou callback ??, mais je ne sias pas comment faire.
    Ou peut etre avec SDL ????


    Cordialement.

  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 519
    Points
    41 519
    Par défaut
    Un projet GUI reçoit des messages WM_KEYDOWN si l'on presse une touche pendant que sa fenêtre est au premier plan.
    (et aussi des messages WM_CHAR si la boucle de messages appelle TranslateMessage()).
    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
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    pas du C.

    Et même en GUI, il y en a pleins de différents..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  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 519
    Points
    41 519
    Par défaut
    Ah oui, je n'avais même pas vu qu'on était dans le forum C en fait.
    Je me croyais dans "Développement Windows"...
    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
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    en fait, ce que je souhaite faire a terme, c'est surligner une ligne de texte par exemple sous word et lorsque je press F8 afficher le texte sélectionné dans une fenêtre.
    Voila vous savez tout, le problème c'est que je ne sais pas du tout par ou passer pour gérer les evenements.

    Cordialement

  6. #6
    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 519
    Points
    41 519
    Par défaut
    Ce genre de truc est plus compliqué, car il faut surveiller des fenêtres qui ne sont pas les tiennes. Regarde dans la rubrique Développement Windows, ce genre de sujet revient tous les mois.
    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.

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    je m'oriente aujourd'hui vers l'utilisation de "hook" visiblement il est possible de l'integrer sans passer par une dll. ? es tu ok sur le principe ??

  8. #8
    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 519
    Points
    41 519
    Par défaut
    Si tu fais un hook bas niveau, tu n'auras pas besoin de DLL. Si tu fais un hook de haut niveau, tu n'as pas le choix, la DLL est nécessaire.
    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.

  9. #9
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Re bonjour,

    J'ai reussi a utiliser le Hook clavier et souris, plus de souci de se point de vue la.
    j'arrive a naviguer sous toutes les fenetres.

    mais voila maintenant lorsque je fais une sélection, et que décide d'enregistrer la selection dans un buffer, seul le texte dans la barre de titre de la fenetre est enregistrer.

    Alors que je souhaiterais obtenir le texte sélectionne par la souris auparavant.

    pour ce faire j'ai utilisé la fonction SendMessage();

    grosso modo voila ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    mHwnd = GetForegroundWindow();      
     
    .....
    ...
     
     len = SendMessage(mHwnd,WM_GETTEXTLENGTH,0,0)+1; 
             printf("Len %d\n",len);
             SendMessage(mHwnd,WM_GETTEXT,len,source);
             printf("%s\n",source);
     
    ....

    Avez vous une idée ??

    Cordialement

    Guitz

  10. #10
    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 519
    Points
    41 519
    Par défaut
    Il faut trouver le contrôle qui a le focus.
    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.

  11. #11
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    c'est la première fois que j'entends parler de ce terme "controle qui a le focus". je regarde un peu sur le net ce que cela signifie.

    Pourrais tu m'éclairer un peu la dessus? sans me donner la solution pour autant bien sur. Tu sembles maitriser la chose.

    Je te remercie.

    Cdt

    Guitz

  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 519
    Points
    41 519
    Par défaut
    Le "contrôle qui a le focus", c'est par exemple l'editbox où se trouve le curseur vertical.

    Seulement, je n'ai aucune idée de la façon dont on peut récupérer le contrôle qui a le focus quand il est dans un autre thread, et encore moins dans un autre processus...
    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
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    puis je t envoyer mon morceau de code afin que tu puisses voir deja comment celui-ci fonctionne en ce moment ??
    peut etre que tu y verra plus clair après ??

    Guitz

Discussions similaires

  1. intercepter une touche clavier, c pourtant simple
    Par xoco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 26/11/2008, 15h50
  2. Réponses: 2
    Dernier message: 07/11/2008, 16h34
  3. Comment remplacer une fonction d une touche clavier
    Par dominic75 dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 10/04/2006, 17h09

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