La Web del Programador: Comunidad de Programadores
 
    Pregunta:  9410 - CAPTURAR PULSACIóN DE TECLA
Autor:  Jose Luis Caba Ortiz
Quisiera realizar un programa residente el cual capturase las teclas pulsadas,
me gustaria que recibir orientación de como hacerlo para DOS y Windows.
He leido algo sobre las funciones setvect y getvect, pero no tengo muy claro su funcionamiento.
También agradeceria explicación sobre función MK_FP, gracias

  Respuesta:  José Luis De la Cruz Lázaro
Hola Jose

Antes que todo debes saber que esto se hace mediante la convención de códigos de teclas SCANCODE. Esta es una tabla de códigos donde a cada tecla le va a corresponder un número diferente( 8 bits ), esta tabla tiene muy valores diferentes a los ASCII, como por ejemplo en el scancode no hay minúsculas ni mayúsculas, solo un código por tecla. Hasta SHIFT, ALT, SCROLL LOCK, etc, tienen su scancode. Otra ventaja es que el bit de mayor peso del scancode de una tecla se pondrá a 1 mientras se la presione ( make) y será 0 cuando se suelte(release). Ya te imaginas cuantas cosas se puede hacer con esto. Si alguna vez has programado el mouse mediante eventos, sabrás a lo que me refiero.

A partir de algunas viejas rutinas que tenía archivadas por ahí, logré hacer un programa residente que modifica el vector de interrupción referido al control del teclado mediante el puerto 0x60. Es decir borro temporalmente el software de control de teclado por defecto que proporciona DOS ( mediante interrupciones BIOS ), es muy lento; y luego instalo mi propia rutina que lee directamente el scancode mediante el puerto 0x60, la cual a su vez guarda este valor en un arreglo booleano( 0= tecla no presiona 1 = tecla presionada). La ventaja es que el arreglo se actualiza solo y lo único que tienes que hacer para saber si esta presionada una tecla es inspeccionar el elemento cuyo índice es su scancode.

Si Tecla[ scancode ] = 0 -> tecla suelta
Si Tecla[ scancode ] = 1 -> tecla presionada

Encontraras una función instalar y otra desinstalar, que debes invocarla antes y después de tu bucle principal. Es muy importante desinstalar el controlador, o de lo contrario tu PC puede colgarse :-(..

Ahh otra cosa, l

  Respuesta:  SuNcO Castañeda
Mira mi chavo, de interrupciones no se mucho, pero la funcion ke deja residente un programa es Keep

Solo ponla y dale CTRL-F1 para ke veasla ayuda y el ejemplo

Yo tenia un programa ke hacia eso ke tu kieres pero se me perdio

Eso si lo hago en Turbo Pascal, hize como la pelicula de La Red, ke si presionabas ESC hisiera algo malo