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

Battousai 20 Messages postés lundi 12 avril 2004Date d'inscription 19 avril 2006 Dernière intervention - 25 août 2004 à 14:46 - Dernière réponse : racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention
- 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
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 26 août 2004 à 16:47
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de racpp
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 25 août 2004 à 15:02
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
magic_Nono 1878 Messages postés jeudi 16 octobre 2003Date d'inscription 16 mars 2011 Dernière intervention - 25 août 2004 à 15:17
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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 25 août 2004 à 15:25
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
magic_Nono 1878 Messages postés jeudi 16 octobre 2003Date d'inscription 16 mars 2011 Dernière intervention - 25 août 2004 à 15:31
0
Merci
k merci BruNews

Magic Nono: l'informagicien! 8-)
Commenter la réponse de magic_Nono
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 25 août 2004 à 15:31
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
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 25 août 2004 à 15:32
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
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 25 août 2004 à 15:35
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
magic_Nono 1878 Messages postés jeudi 16 octobre 2003Date d'inscription 16 mars 2011 Dernière intervention - 25 août 2004 à 15:35
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
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 25 août 2004 à 15:39
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
magic_Nono 1878 Messages postés jeudi 16 octobre 2003Date d'inscription 16 mars 2011 Dernière intervention - 25 août 2004 à 15:43
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
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 25 août 2004 à 17:56
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
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 25 août 2004 à 20:13
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
Battousai 20 Messages postés lundi 12 avril 2004Date d'inscription 19 avril 2006 Dernière intervention - 26 août 2004 à 11:33
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
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 26 août 2004 à 17:09
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.