none
Teclado en pantalla

    Question

  • Hola a todos,

     

    Estoy desarrollando un aplicación de accesibilidad, que básicamente es un conjunto de teclados que interactúan con aplicaciones de windows, como pueden ser Word, Explorer, Windows Media Player, Messenger....

    El teclado lo sitúo en la parte inferior del escritorio, y la aplicación de windows en la parte superior.

    Para simular las pulsaciones de teclas, utilizo la clase SendKeys, y el api user32.dll para obtener la ventana a la que quiero que se las envíe.

     

    Al pulsar un botón, que simula una tecla, en el teclado, la aplicación pierde el foco, ya que al hacer click en el botón cambia el foco de la aplicación de windows (Word, Messenger...) al teclado. Se ejecuta lo que hace el botón-tecla y luego le devuelvo el foco a la aplicación de windows.

     

    El problema de esto, es que parpadea la aplicación de windows porque pierde y recupera el foco, y no funciona como si fuera un teclado, ya que por ejemplo, al seleccionar una lista desplegable, como pierde el foco, si le doy al botón-tecla flecha hacia abajo no lo hace bien y simplemente vuelve a mostrar dicha lista desplegable sin avanzar por ella como haría con el teclado normal.

     

    En windows, Inicio -> Programas -> Accesorios -> Accesibilidad -> Teclado en pantalla, hay un teclado que interactúa con cualquier aplicación de windows sin que ésta pierda el foco, y sin que el teclado tenga el foco. ¿Cómo podría hacer lo mismo?

     

    Espero no haberme liado al explicarme.

    Un saludo y muchas gracias por vuestra ayuda.

     

     

    Friday, November 16, 2007 12:55 PM

Answers

  •  

    Hola,

    He encontrado la solución a mi problema.

    Simplemente tuve que cambiar el estilo del formulario para que no reciba nunca el foco, con el parámetro WS_ES_NOACTIVATE y sobreescribir la propiedad CreateParams.
    El código es el siguiente:

    Bloque de código
            protected override CreateParams CreateParams
            {
                get
                {
                    const int WS_EX_NOACTIVATE = 0x08000000;
                    CreateParams param = base.CreateParams;
                    param.ExStyle = param.ExStyle | WS_EX_NOACTIVATE;
                    return param;
                }
            }

     

     

    Ahora mis teclados interactúan con cualquier aplicación de windows sin que estén parpadeando por el cambio continuo del foco entre la aplicación windows y mi aplicación.

     

    Saludos.

     

    Tuesday, November 20, 2007 7:10 PM

All replies

  •  

    Hola,

    He encontrado la solución a mi problema.

    Simplemente tuve que cambiar el estilo del formulario para que no reciba nunca el foco, con el parámetro WS_ES_NOACTIVATE y sobreescribir la propiedad CreateParams.
    El código es el siguiente:

    Bloque de código
            protected override CreateParams CreateParams
            {
                get
                {
                    const int WS_EX_NOACTIVATE = 0x08000000;
                    CreateParams param = base.CreateParams;
                    param.ExStyle = param.ExStyle | WS_EX_NOACTIVATE;
                    return param;
                }
            }

     

     

    Ahora mis teclados interactúan con cualquier aplicación de windows sin que estén parpadeando por el cambio continuo del foco entre la aplicación windows y mi aplicación.

     

    Saludos.

     

    Tuesday, November 20, 2007 7:10 PM
  • oye serias tan amable de pasarme tu proyecto.. esque estoy haciendo un proyecto y deseo agragar esa funcion del teclado en pantalla... mi correo es diablito_x_11@hotmail.com

    gracias

    Friday, July 11, 2014 4:20 PM