Anuncios Google

[C] Leer estado de las teclas

Hola, resulta que estoy intentando hacer algo en C, y quiero saber alguna funcion con la que pueda escanear el estado de las teclas del teclado, y guardarlas en un buffer... algo así....

 

#define KEY_ESC 27 // 27 es el valor ascii del escape
 
int Teclado[256]; // 256 por los caracteres
while(1){ // Bucle principal
        Teclado = LeerTeclado(); // Leo el buffer del teclado
        if(Teclado[KEY_ESC]) break;
}

 

Miré en la red algunos tutoriales sobre cómo hacer esto, con el kbhit() y el getch() lo intenté pero no me coje las teclas:

#include <conio.h>
 
int* LeerTeclado(void){
        int teclado_temp[256];
        int tecla;
 
        if(kbhit()){    // Si ha pulsado una tecla
                // Obten su valor y ponlo en el buffer
                tecla = getch();
 
                teclado_temp[tecla] = 1;
         }else{   // Si no ha pulsado tecla, vacia el buffer
               memset(&teclado_temp, 0, 256);
        }
 
         // Devuelve el buffer
         return teclado_temp; 
 
}

 

Y encontré otros usando funciones de Windows, como GetKeyState() y GetAsyncKeyState(), pero nada...

 

Espero que puedan ayudarme

 

PD: Lo estoy haciendo con la WinAPI, no en consola.

 


~Actualmente estudiando Ingeniería de las Tecnologías de la Telecomunicación en la Escuela de Ingenieros~


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Almamu

Jamás he visto semejante lio

Jamás he visto semejante lio que tienes montado ahí. No te hacen falta arrays para nada, simplemente un return:

#define KEY_ESC 27
 
char LeerTeclado()
{
        if(kbhit())
        {
                return getch();
        }
 
        return 0;
}
 
int main(int argc, char** argv)
{
        while(LeerTeclado() != KEY_ESC);
}


Imagen de Andresmargar

No funciona...

Pues no se, he usado la funcion que me has dado y no me funciona

 

 

while(!quit){
        if(LeerTeclado() == 97) quit = true; // 97 es la A
}

 

Lo estoy compilando con el devc++ 4.9.2,  y he incluido el conio.h...


~Actualmente estudiando Ingeniería de las Tecnologías de la Telecomunicación en la Escuela de Ingenieros~

Imagen de Almamu

No necesitas poner el

No necesitas poner el while(quit) simplemente lo que yo he puesto y te debe funcionar, a mi me funciona perfectamente en Visual C++ y no es que sea el mejor compilador... Prueba en un proyecto aparte el codigo que te he pasado yo como está, si te funciona es que hay algun getch más por ahí que coje la tecla antes que LeerTeclado()

EDIT: Lo he probado en CodeBlocks y también funciona, te recomiendo que uses CodeBlocks en vez de Dev C++, está descontinuado desde hace tiempo.


Imagen de Andresmargar

Me cambiaré a Code Blocks

a ver si así funciona, gracias! :D

 

AÑADO: Funciona! Pero para que me funcione tuve que seleccionar la consola, pero si no hay otro modo, tendré que hacerlo así, muchas gracias!

 

RE-AÑADO: Lo he intentado con la función GetAsyncKeyState(); y ahora funciona sin tener que darle a la consola (intenté con esta funcion antes, pero le daba valores ASCII, no los valores en virtual...)


~Actualmente estudiando Ingeniería de las Tecnologías de la Telecomunicación en la Escuela de Ingenieros~

Imagen de Loopin

En ASCII la A es el valor 65!

En ASCII la A es el valor 65!

Imagen de Almamu

El valor 65 es para la A

El valor 65 es para la A mayuscula, no minuscula ;) la minuscula es el 97

Imagen de Loopin

Si pero como en el comentario

Si pero como en el comentario pone una A mayuscula, pense que podria ser por eso.

Un saludo.

Imagen de Andresmargar

Nada...

Sigue sin funcionarme...

Imagen de Loopin

Puedes hacerlo a través de

Puedes hacerlo a través de eventos. Puedes tener un "array de teclas" (booleanos), y ponerlas a true o false segun el evento que se produzca.


Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.