PDA

Ver la versión completa : ¿Cómo generar "pulsaciones de teclado"?



Puck2099
29/12/2005, 01:30
Hola,

Con el objeto de crear un teclado virtual para una cosa de la GP2X, necesitaría alguna forma de hacer creer al sistema que se pulsan determinadas teclas de un teclado "real".

He estado mirando el código del Sterm y creo que no me vale porque, más que generar pulsaciones de teclas, lo que hace es crear un pseudo terminal completo y esto va más allá de lo que necesito.

Había pensado en emplear el descriptor de entrada estandar y volcar ahí los datos de las teclas simuladas, pero todas mis pruebas han sido infructuosas...

¿Alguien puede echarme una mano, please? :)

Muchas gracias :brindis:

Luisodin
29/12/2005, 01:35
Habla con efegea o Franxis que ami me interesa mucho esto :P

miq01
29/12/2005, 01:43
Puck, no entiendo muy bien lo que quieres hacer. ¿Quieres que tu "cosa de la GP2X" :) simule pulsar teclas en cierto momento? ¿Desde SDL?

Puck2099
29/12/2005, 01:54
Puck, no entiendo muy bien lo que quieres hacer. ¿Quieres que tu "cosa de la GP2X" :) simule pulsar teclas en cierto momento? ¿Desde SDL?

Sí, a ver, me explico algo mejor.

Como ya sabéis, estoy portando el Exult, y éste responde a ciertos eventos de teclado (en SDL), al pulsar determinadas teclas hace otras tantas acciones.

Como el código es un poco complicado y tampoco quiero modificarlo a saco para poder integrar mis modificaciones fácilmente en el código genérico, había pensado en generar yo las pulsaciones de las teclas con el joystick y que fuera el propio código del Exult el que interpretase que se había pulsado una tecla "real" y actuara en consonancia.

¿Se os ocurre ahora algo más? :)

Saludos

miq01
29/12/2005, 02:00
Bueno, pues si lo he entendido bien, entonces quizá te sirva esta función de SDL:

int SDL_PushEvent(SDL_Event *event);
Como indica su nombre, mete eventos en la cola. Podrías rellenar la estructura event a mano con la tecla que necesita el código de Exult y llamar a esta función.

Puck2099
29/12/2005, 02:36
Bueno, pues si lo he entendido bien, entonces quizá te sirva esta función de SDL:

int SDL_PushEvent(SDL_Event *event);
Como indica su nombre, mete eventos en la cola. Podrías rellenar la estructura event a mano con la tecla que necesita el código de Exult y llamar a esta función.

Sí, tío, tenía la solución más sencilla delante de mi cara y he estado tirando el tiempo con descriptores de ficheros y demás tonterías... :(

Muchas gracias, ya funciona :brindis:

miq01
29/12/2005, 02:59
Sí, tío, tenía la solución más sencilla delante de mi cara y he estado tirando el tiempo con descriptores de ficheros y demás tonterías... :(
Jeje... Suele pasar... :)


Muchas gracias, ya funciona :brindis:
¡Me alegro! :brindis:

BuD
29/12/2005, 03:01
Pues si, esa misma funcion la he usado para simular los clicks del raton para Battle for Wesnoth, pero te tendras que mirar la Stuct SDL_Event para crear el evento de teclado deseado.

Puck2099
29/12/2005, 03:11
Pues si, esa misma funcion la he usado para simular los clicks del raton para Battle for Wesnoth, pero te tendras que mirar la Stuct SDL_Event para crear el evento de teclado deseado.

Sí, una vez me ha recordado miq01 la función a usar lo otro ha sido pan comido :)

Por cierto, yo la emulación de los botones del ratón la hago a pelo, sustituyendo código, pero la del movimiento con el WarpMouse, ¿cómo lo haces tú?

Saludos

BuD
30/12/2005, 00:27
Sí, una vez me ha recordado miq01 la función a usar lo otro ha sido pan comido :)

Por cierto, yo la emulación de los botones del ratón la hago a pelo, sustituyendo código, pero la del movimiento con el WarpMouse, ¿cómo lo haces tú?

Saludos
Pues, cada vez que mira los eventos, hago lo siguiente


int x,y;
SDL_GetMouseState(&x,&y);
if(arriba_pulsado) //esto es una warrada que he hecho yo, pero ya me entiendes.
SDL_WarpMouse(x,y -= 3)
if(abajo_pulsado)
blah blah blah

Puck2099
30/12/2005, 03:29
Pues, cada vez que mira los eventos, hago lo siguiente


int x,y;
SDL_GetMouseState(&x,&y);
if(arriba_pulsado) //esto es una warrada que he hecho yo, pero ya me entiendes.
SDL_WarpMouse(x,y -= 3)
if(abajo_pulsado)
blah blah blah

Vale, entonces lo hacemos del mismo modo :)

Saludos