C/Visual C - Detectar presion de teclas en consola

 
Vista:

Detectar presion de teclas en consola

Publicado por LhaN (2 intervenciones) el 19/08/2007 14:46:03
Hola gente, a ver si puede ayudarme...
Hola gente, a ver si pueden sacarme una duda... en c++ existe la posibilidad de detectar eventos? o sea... generar un bucle hasta que se presione una tecla? o sea a ver si me explico... quiero que por ejemplo comience a sumar números y cuando yo presione enter se detenga y me muestre que numero resulto. usar algo así como un...
do{...hace algo...}while(cin.get()=='\n')
el problema es que si hago eso al llegar al while el programa espera que yo presione una tecla, pero yo no quiero que espere... sino que continúe hasta que yo presione una tecla... si alguien sabe como hacerlo, desde ya muchas gracias.

Aclaracion... C++ puro y llano... en particular Borland C++ 5.02 en modo consola, ya se que en visual c++ o builder se puede... pero no es lo que yo necesito.

Estube investigando... pero no encontre nada relacionado con deteccion de presion de teclas y pareciera ser que lo que necesito hacer es programar en hilos o trheads, busque en la ayuda del borland c++ y encontre un ejemplo donde usa _beginthread(...) y _endthread(), lo copie y lo compile pero dio error al compilar:

Info :noname00.cpp: build due to .OBJ dependency noname00.cpp
Info : noname00.cpp: cached age 21:49:21 12/08/2007 file age 9:35:05 19/08/2007
Info :Compiling C:\BC5\BIN\noname00.cpp
Error: noname00.cpp(14,16):Call to undefined function '_endthread'
Error: noname00.cpp(23,35):Call to undefined function '_beginthread'

Mas alla de este error... y suponiendo que mi logica no esta errada... programando con hilos yo podria hacer lo siguiente:
do{
int var=0;
//crear un hilo con un cin>>x;return x; y lo devuelto asignarlo a var
}while(!var);
de esa forma si preciono una tecla se modificaria la variable var a travez del hilo... lo que me permitiria realizar un bucle infinito mientras no precione una tecla... es asi??? espero que alguien pueda ayudarme.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Detectar presion de teclas en consola

Publicado por Diego (10 intervenciones) el 19/08/2007 17:16:31
Buenas

Lo que vos queres hacer es un keylogger practicamente. Si lo estas haciendo en win, lee sobre la funcion GetAsyncKeyState de la API de Windows.

Quedaria algo como:

while(GetAsyncKeyState( /* nueva linea */) != -32767){
/* Hacer algo */
}

Salu2, Diego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Detectar presion de teclas en consola

Publicado por LhaN (2 intervenciones) el 19/08/2007 18:06:56
Interesante... lo voy a investigar... de todas formas para el borland c++ me entere por otro lado que existe en el conio.h la funcion kbhit() que devuelve 0 si no se presiono ninguna tecla y sino devuelve el valor de la tecla, me imagino que debe estar internamente usando GetAsyncKeyState() por que segun he leido por ahi borland implemento la libreria conio con el objetivo de facilitar el acceso a muchas funciones de las API. Gracias igualmente, un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar