Les touche F..du clavier

Résolu
Battousai Messages postés 20 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 19 avril 2006 - 25 août 2004 à 14:46
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur 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

15 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
26 août 2004 à 16:47
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 !
3
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 15:02
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.
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 août 2004 à 15:17
G U fait ça en C y a lgt, je rechercherai ça ce soir
++
Magic Nono: l'informagicien! 8-)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2004 à 15:25
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 août 2004 à 15:31
k merci BruNews

Magic Nono: l'informagicien! 8-)
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 15:31
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....
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 15:32
oups avait pas vu que vous aviez posté ca.....enfin, ca lui simplifiera peut-etre la vie
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 15:35
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>)
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 août 2004 à 15:35
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-)
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 15:39
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)
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 août 2004 à 15:43
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-)
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
25 août 2004 à 17:56
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.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
25 août 2004 à 20:13
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à.
0
Battousai Messages postés 20 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 19 avril 2006
26 août 2004 à 11:33
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
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
26 août 2004 à 17:09
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
0
Rejoignez-nous