Utilisation des touches f1-f12 dans un projet console

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 457 fois - Téléchargée 37 fois

Contenu du snippet

Suite à des questions à ce sujet sur le forum, je dépose ce petit code source permettant de récupérer les codes des touches F1-F12, flèches, INSER, SUPPR etc. Ca pourrait être très utile dans certains cas de projets console ou DOS pur. Pour les touches qui ne possèdent pas de code ASCII, la fonction getch() renvoit 0. Le code SCAN de la touche reste dans le buffer clavier. Il suffit d'appeler getch() une deuxième fois pour le récupérer. Ce source est tellement simple qu'il n'a pas besoin de commentaires.

Source / Exemple :


//----------------------------------------------------------------------------------------
#include <conio.h>
#include <stdio.h>

void main()
{
	int touche;
	printf ("\nAppuyer sur la touche ECHAP pour quitter\n");
 	while(1)
	{
      touche=getch();
	  if (touche==0 || touche==224)
	  { 
		  touche=getch();
		  switch (touche)
		  {
		  case (59):printf("Scancode : %d%s\n",touche,"  = Touche F1 ");break;
		  case (60):printf("Scancode : %d%s\n",touche,"  = Touche F2 ");break;
		  case (61):printf("Scancode : %d%s\n",touche,"  = Touche F3 ");break;
		  case (62):printf("Scancode : %d%s\n",touche,"  = Touche F4 ");break;
		  case (63):printf("Scancode : %d%s\n",touche,"  = Touche F5");break;
		  case (64):printf("Scancode : %d%s\n",touche,"  = Touche F6 ");break;
		  case (65):printf("Scancode : %d%s\n",touche,"  = Touche F7 ");break;
		  case (66):printf("Scancode : %d%s\n",touche,"  = Touche F8 ");break;
		  case (67):printf("Scancode : %d%s\n",touche,"  = Touche F9 ");break;
		  case (68):printf("Scancode : %d%s\n",touche,"  = Touche F10 ");break;
		  case (133):printf("Scancode : %d%s\n",touche,"  = Touche F11 ");break;
		  case (134):printf("Scancode : %d%s\n",touche,"  = Touche F12 ");break;
          case (72):printf("Scancode : %d%s\n",touche,"  = Fleche vers le HAUT");break;
          case (80):printf("Scancode : %d%s\n",touche,"  = Fleche vers le BAS ");break;
		  case (75):printf("Scancode : %d%s\n",touche,"  = Fleche vers la GAUCHE ");break;
		  case (77):printf("Scancode : %d%s\n",touche,"  = Fleche vers la DROITE");break;
		  case (73):printf("Scancode : %d%s\n",touche,"  = Page UP ");break;
		  case (81):printf("Scancode : %d%s\n",touche,"  = Page DOWN");break;
		  case (71):printf("Scancode : %d%s\n",touche,"  = DEBUT ");break;
		  case (79):printf("Scancode : %d%s\n",touche,"  = FIN ");break;
		  case (82):printf("Scancode : %d%s\n",touche,"  = INSERT");break;
		  case (83):printf("Scancode : %d%s\n",touche,"  = SUPPR");break;
		  }		  
	  }
      	  if (touche==27) return;
	}
}
//----------------------------------------------------------------------------------------------

A voir également

Ajouter un commentaire

Commentaires

cs_manubarnum
Messages postés
8
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
21 novembre 2004

Ben pour ce que j'y connais, voilà un petit programme simple et efficace. Merci
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
ce depend de l'os utilisée, si c'est la mandrake pour xbox c'est sur

sinon ca reste un w2k light en mode reel, ca doit se faire avec des interruptions
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

sur une xbox tu coderais en unix/linux ^^ assurément.
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
"Je voulais dire que le C de Microsoft et Borland, possède des fonctions non standard destinées à MS-DOS et Windows"

oui, mais c'est le cas pour tout les systeme ! le c standard t'assure la portabilité du code mais chaque os possede ses propres api pour faire des appels systemes de bas niveau et assurement non portable, et surtout d'une notion beaucoup moins abstraites que le c standard

c'est pour ca que le terme "deux catégories de C" ne me semble pas aproprié

en fait il y a le c standard puis ce qui est propres a chaque os ( api pour les appels systemes)
on a donc pas seulement unix + windows borland mais tout !

comment on ferais sur une xbox par exemple ?


c'est logique que si tu touche au clavier ton code n'est plus portable puisque la notion de clavier ne l'est pas
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
11
Kirua > Merci à toi aussi pour la précision. Je n'ai jamais travaillé sur Dev C++ ni sur GCC, ce sont des choses que j'ai lues sur le net juste pour savoir ce qui se fait ailleurs. Je n'ai jamais travaillé sur UNIX ni sur Linux non plus...

djl > J'avoue que j'ai beaucoup hésité avant d'employer le mot "catégorie" car j'ai pas trouvé un terme plus approprié. Je voulais dire que le C de Microsoft et Borland, possède des fonctions non standard destinées à MS-DOS et Windows. Ce qui rend les codes sources, contenant ces fonctions, non portables vers les autres systèmes comme UNIX. Le C du monde UNIX doit lui aussi avoir ses particularités. Quand je regarde un source pour UNIX ou Linux, je n'arrive pas à tout comprendre. Le C standard est le tronc commun pour les deux. Les compilateurs C standard ne peuvent pas s'empêcher de pénaliser l'un ou l'autre sytème d'exploitation.
A propos de getch(), si tu peux la faire facilement, je te dis BRAVO. Je pense que c'est possible à condition d'avoir les connaissances et les outils nécessaires car, d'après ce que j'ai appris, le sytème UNIX est un serveur qui communique avec des terminaux (clavier+écran) sous forme de flux (fichiers+réseau). Je peux me tromper car je n'ai aucune expérience en UNIX.

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.