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~
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:
No funciona...
Pues no se, he usado la funcion que me has dado y no me funciona
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~
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.
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~
En ASCII la A es el valor 65!
En ASCII la A es el valor 65!
El valor 65 es para la A
El valor 65 es para la A mayuscula, no minuscula ;) la minuscula es el 97
Si pero como en el comentario
Si pero como en el comentario pone una A mayuscula, pense que podria ser por eso.
Un saludo.
Nada...
Sigue sin funcionarme...
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.