Programación General > C/C++
Ascii + arrowkeys
(1/1)
Leber:
Hola, que tal.
Con un proyecto que estoy haciendo, necesito capturar eventos a base de teclas, y de momento va bien hasta que me topo con la necesidad de usar las arrowkeys, que como algunas otras teclas, no tienen un codigo ascii, sino dos.
Segun esta web: http://www.jimprice.com/jim-asc.shtml , el primer codigo es una tecla de escape que varia segun el lenguaje. En C parece ser el 27, (codigo que pertenece a la tecla ESC). Pero el segundo codigo que me sale no me cuadra demasiado, ya que me dice que cualquiera de las 4 flechas tiene el codigo 91.
Aqui os dejo el codigo que hago servir, quiza es que este haciendo algo mal.
--- Código: C ---#include <stdio.h> int main(void){ int key; key = getchar(); printf("%dn", key); if(key == 27) { key = getchar(); printf("%dn", key); } return 0;}
Y aqui la salida:
Presionando el '+':
--- Código: C ---test@sistemes-test:~/c/dl$ ./keys +43
Presionando ESC:
--- Código: C ---test@sistemes-test:~/c/dl$ ./keys ^[2710
Presionando Uparrow
--- Código: C ---test@sistemes-test:~/c/dl$ ./keys ^[[A2791
Presionando Leftarrow
--- Código: C ---test@sistemes-test:~/c/dl$ ./keys ^[[C2791test@sistemes-test:~/c/dl$
Gracias de antemano
m0skit0:
Las teclas extendidas no pueden ser recuperadas con getchar() que como su nombre indica recupera caracteres y no teclas. Y el código de tecla extendida que yo sepa es igual e independiente del lenguaje.
Mi consejo es que uses una librería para ello (Allegro por ejemplo).
Leber:
El código de tecla si, es igual, me referia al de escape. Dicen que a veces se antepone un 0, o a veces un 27.
No se, pense que igual que podía capturar la tecla ESC, la tecla +, el espacio, (estos tres no me dan ningun problema), podría hacer lo mismo con las arrowkeys.
Estaba usando GTK para la interfaz, y tiene eventos para capturar teclas, no hay problema, es lo que estoy usando, más que nada era curiosidad de saber como las recupera el.
Gracias por responder
m0skit0:
Tienes que capturar más códigos. Por ejemplo
--- Código: C ---#include <stdio.h> int main(){ int input; do { input = getchar(); printf("You pressed key ID: %02d 0x%02xn", input, input); }while(input != 'q');} Probándolo pulsando las teclas de flecha arriba, abajo, derecha e izquierda:
--- Código: Text ---$ ./prueba^[[A^[[B^[[C^[[DYou pressed key ID: 27 1bYou pressed key ID: 91 5bYou pressed key ID: 65 41You pressed key ID: 27 1bYou pressed key ID: 91 5bYou pressed key ID: 66 42You pressed key ID: 27 1bYou pressed key ID: 91 5bYou pressed key ID: 67 43You pressed key ID: 27 1bYou pressed key ID: 91 5bYou pressed key ID: 68 44You pressed key ID: 10 0a Vemos que por cada una genera 3 códigos y no 2.
Saludos.
Leber:
Uhm, no habia caido en eso. Como lo has sabido?
Gracias ^_^
Navegación
Ir a la versión completa