Les touche F..du clavier [Résolu]

Messages postés
20
Date d'inscription
lundi 12 avril 2004
Dernière intervention
19 avril 2006
- - Dernière réponse : racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
- 26 août 2004 à 17:09
salut,
je suis entrain d'ecrir un programme en c en mode dos (que j'éspere poster sur ce site), et j'aimerait y ajouter l'utilisation des toucher F1,F2... du clavier ,je trouve pas leurs code ascii .
si quelqu'un a une idée merci
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
3
Merci
Salut,
Chaque touche du clavier a un code SCAN unique (1 octet). Seules les touches alphanumériques ont aussi un code ASCII (+ ENTREE, ECHAP, TAB, BACKSPACE). La touche "A" , d'un clavier AZERTY, a le même code SCAN que la touche "Q" du clavier QWERTY. Mais ils n'ont pas le même code ASCII . Ce dernier change d'ailleurs selon que la touche MAJ est appuyée ou non. La fonction getch() retourne le code ASCII de la touche tapée. Pour les touches F1-F12, elle retourne 0 (224 pour F11 et F12 sous Windows) puis met le code SCAN de la touche dans le buffer clavier. Il suffit d'appeler une deuxième fois getch(), sans avoir à taper de nouveau, pour retrouver le code SCAN de la touche. C'est une astuce que j'ai découvert au début des années 90 en travaillant sur TURBO C sous DOS. Je l'avais toujours utilisée dans mes applications pour permettre l'emploi des touches F1-F12 et ça marchait parfaitement.
N'oublie pas de cliquer sur "Réponse acceptée !" si c'est le cas.
Bonne programmation !

Merci racpp 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de racpp
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
0
Merci
crée un pti prog en mode console qui attend un char au clavier et qui ressort ce char converti en int a l'ecran, tu auras les codes ascii ainsi.
Commenter la réponse de leprov
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Dernière intervention
16 mars 2011
0
Merci
G U fait ça en C y a lgt, je rechercherai ça ce soir
++
Magic Nono: l'informagicien! 8-)
Commenter la réponse de magic_Nono
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
http://www.cppfrance.com/code.aspx?ID=9429

Te fatigue pas nono, on en a deja des dizaines de sources 'cin cout', je ne vois pas l'interet d'une de plus.

ciao...
BruNews, Admin CS, MVP VC++
Commenter la réponse de BruNews
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Dernière intervention
16 mars 2011
0
Merci
k merci BruNews

Magic Nono: l'informagicien! 8-)
Commenter la réponse de magic_Nono
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
0
Merci
bon de tete (avec mes vieux restes de C)

#include <stdio.h>

int main (void)
{
char C;
while (1)
{
scanf ("%c", &C);
if (isalpha (C)) break;
else printf ("%d\n", C);

}

return 0;

}

(dsl je me rappelle plus la bibli ou ya isalpha....)
si jai pas fait de fautes ca devrait marcher....
Commenter la réponse de leprov
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
0
Merci
oups avait pas vu que vous aviez posté ca.....enfin, ca lui simplifiera peut-etre la vie
Commenter la réponse de leprov
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
0
Merci
a ca y'es! isalpha c'est dans ctype.h (ou cctype selon ton compilo.......si il est a la norme ca sera #include <cctype> sinon ca sera #include <ctype.h>)
Commenter la réponse de leprov
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Dernière intervention
16 mars 2011
0
Merci
isalpha serait inutile
une touche donnée suffit : exemple classique : 'q'

et pr le printf autant faire "%c %d",c,c

à propos leProv, juste ds une logique d'optimisation utilise des variables en minuscule....

++
Magic Nono: l'informagicien! 8-)
Commenter la réponse de magic_Nono
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
0
Merci
bah une touche suffit, chui daccord, mais cest plus pratique de pas avoir a la chercher, c'est tt. j'avais mis q au depart, mais imagine ton verouillage majuscule est verouillé et tas pas les diodes, tu vas galérer comme un abruti pour quitter ton prog (ca mest deja arrivé :D)....c'est juste une question de pratique. oui variable en minuscules, j'etais parti pr mettre une var plus longue en notation chai plus koi (je me rappelle jamais le nom de cette norme....mais je my conforme a peu pret), et jai changé d'avis sans changer ske je faisais, ca donne ca.....pr le printf, tt a fait daccord, cest vrai ke cest plus sympa (avec un \n a la fin encore plus mais bon on va pas chipoter....:D)
Commenter la réponse de leprov
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Dernière intervention
16 mars 2011
0
Merci
logique d'optimisation

nan logique d'utilisation plutot

et ok pr le \n, CT implicite

d'hab, cond de sortie bateau: touche echap ou 'q' & 'Q'

++

Magic Nono: l'informagicien! 8-)
Commenter la réponse de magic_Nono
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
0
Merci
Salut,
Les touches F1-F12 n'ont pas de codes ASCII. Pour les utiliser dans un programme il faudra récupérer leurs codes SCAN. La fonction getch() renvoie deux valeurs quand il s'agit d'une touche comme F1-F12. Il faudra récupérer la deuxième valeur avec un nouvel appel à getch(). La première valeur est 0 pour F1 à F10 et 224 pour F11-F12. Voici un petit exemple sous Visual C++ 6:
//---------------------------------------------------------------------------------------------
#include <conio.h>

void main()
{
int touche;
cprintf ("\nAppuyer sur la touche ECHAP pour quitter\n");
 	while(1)
{
          touche=getch();
  if (touche==0 || touche==224)
    { 
             cprintf("Scancode : ");//il s'agit d'un scancode
             cprintf("%d",touche);//1er retour de getch
             cprintf("%c",44);//insérer virgule
             touche=getch();//2eme appel 
   }
         cprintf ("%d\n",touche);// code ascii
 if (touche==27) return;
}
}
//---------------------------------------------------------------------------------------------

Ce petit source affiche les valeurs retournées par getch() pour les touches F1-F12 ou le code ASCII des autres touches.
A bientôt.
Commenter la réponse de racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
0
Merci
J'ai oublié de préciser que pour le deuxième appel de getch(), on n'a pas besoin de taper de nouveau une touche, car cette fontion récupère la deuxième valeur qui reste encore dans le buffer clavier. Voilà.
Commenter la réponse de racpp
Messages postés
20
Date d'inscription
lundi 12 avril 2004
Dernière intervention
19 avril 2006
0
Merci
merci racpp,
tu veut dire que les touche F ne sont pas exactement des codes ascii (il ne sont pas sur des octet mais sur 16 bit)
il faudra donc tester les deux octets qui constitue la touche
ok
Commenter la réponse de Battousai
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
0
Merci
Cette astuce est valable aussi pour les touches fort utiles:
Flèche vers la gauche
Flèche vers la droite
Flèche vers le haut
Flèche vers le bas
Touche SUPPR
Touche INSERT
Touche FIN
Touche DEBUT
PAGE UP
PAGE DOWN
Commenter la réponse de racpp

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.