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 :

detecter une touche du clavier


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 134
    Points : 77
    Points
    77
    Par défaut detecter une touche du clavier
    J'aimerais que mon programme détecte les touche du clavier.
    mais je ne veux pas un truc bloquant comme scanf, il faut que mon programme detecte la touche a n'importe quel moment et ou qu'il soit(par exemple qu'il appele une fonction dès que j'appui sur telle ou telle touche)
    comment faire?

  2. #2
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Août 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2003
    Messages : 25
    Points : 29
    Points
    29
    Par défaut
    Tout ce que je sais c'est qu'avec ncurses tu peux paramétrer getch() pour qu'il soit non-bloquant. Il doit y avoir moyen de le faire avec conio.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 134
    Points : 77
    Points
    77
    Par défaut
    si getch devient non-bloquant, ca ne m'arrange pas des masses, parce que du coup il ne detectera pas la touche du clavier

  4. #4
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    OS ?
    GetKeyState + Thread devrait fonctionner.

  5. #5
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    kbhit()+getch() permet d'analyser les frappes clavier de manière non-bloquante.
    http://c.developpez.com/faq/c/?page=...ecoute_clavier

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 134
    Points : 77
    Points
    77
    Par défaut
    j'ai oublié de préciser que j'étais sous unix.
    mais ce qui m'interesse c'est surtout comment faire en th
    éorie.
    Lorqu'on appui sur un touche, un signal est emis au processus non? je pensais donc qu'il y avait peut etre moyen d'int
    eronpre la fonction en cours lorque un tel signal est emmis et d'appeller une autre fonction avant de revenir ou on etait.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 119
    Points : 106
    Points
    106
    Par défaut
    Si c'est une appli win32 utilise le message WM_KEYDOWN exemple :

    dans la boucle des messages :

    if(messages.message == WM_SYSKEYDOWN && messages.wParam == VK_ESCAPE){
    /* actions */
    }


    Pour info VK_ESCAPE c'est la constante de la touche...excape mdr, pour avoir la liste va sur la msdn.

    Si c'est une appli console tu vas avoir du mal , car détecter a TOUT moment ce n'est pas possible à moin d'une boucle infinie avec getch() mais bon tu sera bloquer a un moment ou a un autre.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 119
    Points : 106
    Points
    106
    Par défaut
    ha sous unix... je peu rien pour toi :s

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 134
    Points : 77
    Points
    77
    Par défaut
    effectivement, j'aimerais m'en sortir sans faire de boucle infini

  10. #10
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958

  11. #11
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Août 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2003
    Messages : 25
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par deck_bsd
    Si c'est une appli win32 utilise le message WM_KEYDOWN
    Non il est sous un environnement Unix apparement.
    Moi sous linux, j'utilise ncurse. J'avais fais un Snake ( le jeu ) et j'utilisais getch() en mode non bloquant pour qu'a n'importe quel moment le joueur puisse changer de direction.

  12. #12
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    sous unix, tu peux modifier les parametres de ton tty pour qu'il ne soit plus en "line buffered" : ton terminal attend que tu appuie sur enter pour envoyer tout ça.

    faire man termios.


    si tu veux travailler avec les vecteurs d'interruptions toussa, faut le faire en assembleur

    ---
    mince, grillé encore !

    et j'ai appris un truc, j'avais jamais vut cfmakeraw ...

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 134
    Points : 77
    Points
    77
    Par défaut
    Ne plus etre en line buffered ne resoudra pas mon probleme.
    Si il est possible de faire ca en assembleur pourquoi pas en c?

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 134
    Points : 77
    Points
    77
    Par défaut
    Non il est sous un environnement Unix apparement.
    Moi sous linux, j'utilise ncurse. J'avais fais un Snake ( le jeu ) et j'utilisais getch() en mode non bloquant pour qu'a n'importe quel moment le joueur puisse changer de direction.
    tu t'es servi de quel lib graphique pour ton jeu?
    ca m'etonne que tu fasse ca avec une fonction comme getch qui est plutot prevu pour les terminaux.

  15. #15
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Août 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2003
    Messages : 25
    Points : 29
    Points
    29
    Par défaut
    Avec ncurses.
    C'était un jeu en mode texte, dans la console.
    ncurse m'a permis de mettre de la couleur ainsi que de gérer les déplacements. la fonction getch() de ncurses peut etre mise en mode non-bloquant comme ceci De plus tu peux gérer les caractères spéciaux avec

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 134
    Points : 77
    Points
    77
    Par défaut
    moi aussi je fait un jeu, mais avec une fenetre graphique(donc je peu pas trop me servir de getch)

  17. #17
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Tu pourrais passer le terminal en mode non canonique (mode brut), puis ensuite créer un thread où tu attends qu'une touche soit pressée (avec un "read" par exemple).

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 134
    Points : 77
    Points
    77
    Par défaut
    Le probleme c'est que je suis en mode graphique donc le getch,scanf ou read ne sont pas pris en compte puisque le terminal est en arriere plan.

  19. #19
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    17 réponses et personne n'a demandé quelle bibliothèque graphique utilise-t-il?

    Donc la 18ème sera:

    Tu utilises quelle bibliothèque graphique parce que généralement, la gestion du clavier est incluse avec...

    Jc

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 134
    Points : 77
    Points
    77
    Par défaut
    J'utilise sdl.
    Je sais comment recuperer les evenements clavier avec cette lib mais j'aimerais justement m'en passer.

Discussions similaires

  1. Détection de l'appui sur une touche du clavier
    Par Oh!Tofocus dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/12/2008, 02h08
  2. Réponses: 2
    Dernier message: 16/05/2006, 23h57
  3. Simuler l’appuie sur une touche du clavier
    Par Furius dans le forum C++
    Réponses: 2
    Dernier message: 26/09/2005, 17h15
  4. [CF][C#/PPC] Comment être à l'écouter d'une touche du clavier ?
    Par freddyboy dans le forum Windows Mobile
    Réponses: 6
    Dernier message: 18/05/2005, 17h32
  5. [Turbo Pascal] Lire une touche au clavier sans interrompre le programme
    Par Allelouia dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 29/03/2003, 22h31

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