Detectar las flechas del teclado, ESC o cualquier otra tecla |
|
Escrito por adrianvaca
|
Martes, 22 de Marzo de 2011 23:37 |
La función getch, presenta ciertos problemas a la hora de detectar ciertas teclas especiales como las flechas, ESC o las teclas de función.
Vamos a construír una función llamada ObtenerTecla, que reemplace a la anterior y que nos permita manejar de forma adecuada el teclado y llevar a cabo acciones cuando se presionen las teclas de funcion(F1, F2, F3,...), teclas especiales(ESC, TAB, INS,...), las flechas del teclado y cualquier otra.
- Definición de constantes y la nueva función:
#include <stdio.h> #include <bios.h> #include <conio.h> #include <ctype.h>
/* Caracteres especiales */ #define _BKSPC 0xe08 /* BACKSPACE ( tecla Retroceso) */ #define _TAB 0xf09 /* TAB */ #define _ENTER 0x10d /* ENTER */ #define _ESC 0x11b /* ESCAPE */ #define _ESP 0x3920 /* ESPACIO */
/* Teclas de codigo extendido */ #define _ARR 0x4800 #define _ABJ 0x5000 #define _IZQ 0x4b00 #define _DER 0x4d00
#define _INS 0x5200 #define _DEL 0x5300 #define _HOME 0x4700 #define _END 0x4f00 #define _PGUP 0x4900 #define _PGDN 0x5100
#define _F1 0x3b00 #define _F2 0x3c00 #define _F3 0x3d00 #define _F4 0x3e00 #define _F5 0x3f00 #define _F6 0x4000 #define _F7 0x4100 #define _F8 0x4200 #define _F9 0x4300 #define _F10 0x4400
int ObtenerTecla() { int tecla;
/* Espera a que una tecla sea presionada */ while (_bios_keybrd(_KEYBRD_READY) == 0);
/* Obtiene la tecla presionada */ tecla = _bios_keybrd(_KEYBRD_READ);
/* Si es alfanumerico retorna el codigo ASCII, por ejemplo para 'A', retornara 65 */ if (isalnum(tecla & 0xFF)) return (char)tecla;
/* Retorna el codigo de la tecla presionada */ return tecla; } |
- Ahora una prueba, fíjense en lo fácil que resulta detectar la tecla presionada por el usuario:
void main() { clrscr();
int c = ObtenerTecla();
if(c==_ARR) { printf("ARRIBA"); } else if(c==_ABJ) { printf("ABAJO"); } else if(c==_IZQ) { printf("IZQUIERDA"); } else if(c==_DER) { printf("DERECHA"); } else if(c==_ESC) { printf("ESCAPE"); } else if(c==_F7) { printf("F7"); } else if(c=='A') { printf("A"); } else if(c=='5') { printf("5"); }
/* Similar a getch */ ObtenerTecla();
clrscr(); } |
Hay un programa el cual nos permite obtener además el nombre de la tecla presionada y tienes instrucciones sobre como tratar combinaciones de teclas como CTRL+F5, CTRL+ALT+g y que puede accederse desde aquí
|