Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





teclado virtual en windows

Iniciado por Manu343726, 27 de Octubre de 2012, 04:03:05 PM

« anterior - próximo »

Manu343726

buenas

estoy desarrollando una aplicación de comandos de voz para ejecutar atajos de teclado. Algo tipo "lanzar granada" y que pulse la tecla G

Tras hechar un vistazo a la documentación de la API de windows, lo unico que he encontrado es "SetKeyboardState" pero dice que solo afecta al hilo llamante. Alguna idea?

PD: Mientras escribia ésto, me he acordado de SendMessage. Podria mandar un mensaje de pulsacion de tecla, pero no afecta solo a la ventana/aplicación del manejador que le paso?

Mi problema es que dicho mensaje deberia llegar a la ventana que tiene el foco (El juego, en el caso del ejemplo)

Manu343726

Tras fisgar un poco más estoy barajando utilizar PostMessage (Obteniento el HWND de GetForegroundWindow) o utilizar SendInput para simular interrupciones hardware. 
La única pega que veo es que con ninguno de los dos veo la forma "directa" de mandar pulsaciones de tecla que incluyan control o shift (algo tipo CTRL + A). Solo se me ocurre mandar un keydown del shift, luego el keydown de la A, y luego los keyup del shift y de la A.

Alguna idea?


Manu343726

Al final me ha podido la vaguería, ando con algo de prisa, y voy a tirar de un wrapper que he encontrado en CodePlex que utiliza SendInput. La verdad es que tiene muy buena pinta: http://inputsimulator.codeplex.com/

Manu343726

Ahora intentaré hacer una pregunta que no pueda autoresponder en menos de doce horas:

Como comenté en el post anterior, al final he utilizado un wrapper de SendInput llamado "Input Simulator" (http://inputsimulator.codeplex.com/)
con el que he conseguido hacer funcionar mi cacharro:


Pero hay un problema: En el escritorio funciona perfectamente, como veis lo he estado probando con el bloc de notas. Pero lo he probado con juegos y no funciona.
No se supone que SendInput emula interrupciones hardware? De ser así, no debería haber diferencia entre usar funciones del API de windows para captar las pulsaciones de tecla (Véase WM_KEYDOWN) o utilizar DirectInput o cualquier otro sistema. Digo yo.

Se supone que SendInput no lanza eventos a nivel del hilo llamante, debería lanzarlos a nivel global. Si ésto es así, y yo no he entendido mal, no debería haber problema. Alguna idea?

Puede ser también que el sistema de reconocimiento de voz necesite tener el foco para funcionar (Como si de cualquier otro tipo de input se tratara)?






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.