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

[0] Índice de Mensajes

Ir a la versión completa