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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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 confirmé

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

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

    Et même en GUI, il y en a pleins de différents..

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    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

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