Teclado en pantalla

02/03/2009 - 13:58 por oaoeoo | Informe spam
Hola, necesito disponer de un teclado en pantalla para unas
aplicaciones que van en pantalla táctil. El de Windows, OSK, no me
vale, pues tiene las teclas muy pequeñas. He hecho un ejecutable con
un diseño de teclas más grandes, pero ahora no sé cómo enviar la tecla
pulsada a la aplicación que esté activa. ¿Dónde puedo encontrar algo?
Saludos.

Preguntas similare

Leer las respuestas

#6 Alex Lopez [MSFT]
03/03/2009 - 01:40 | Informe spam
Una de las soluciones (que utilizan la mayoría de las herramientas de
accesibilidad) es crear la ventana de la aplicación con el estilo
WS_EX_NOACTIVATE. De esta forma el foco del teclado se mantiene en la
aplicación activa (por ejemplo Word) y por lo tanto los efectos de SendKeys
van directamente a esta sin que necesites buscar y activar la aplicación.
El problema de usar esto es que la ventana del teclado en pantalla no recibe
los mensajes del teclado real y si necesitas manejarlos también es necesario
que instales un KeyboardHook... pero si este teclado en pantalla se controla
sólo por ratón, touchscreen o una tecnología similar no debes tener ningún
problema.

Saludos,
-Alejandro

http://blogs.msdn.com/rayita
This posting is provided "AS IS" with no warranties, and confers no rights.
Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no
otorga ningún derecho.


wrote in message
news:
(igual sale repetido el post, no estoy seguro de haber enviado el
anterior)

Tengo el siguiente código, tomado del ejemplo que me indicabas:
[STAThread]
static void Main()
{
Application.Run(new formTeclado());
}
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);

// Activate an application window.
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

private void simpleButton6_Click(object sender, System.EventArgs e)
{
// Get a handle to the Wordulator application. The window class
// and window name were obtained using the Spy++ tool.
IntPtr Word = FindWindow("OpusApp", "Documento1 - Microsoft Word");

// Verify that Wordulator is a running process.
if (Word == IntPtr.Zero)
{
MessageBox.Show("Abrir el word en blanco");
return;
}

// Mandar la tecla
SetForegroundWindow(Word);
SendKeys.SendWait("ATA LA JACA A LA ESTACA");

}

los resultados no son los esperados, sólo se envía el texto al word
aleatoriamente, no en cada pulsación de la tecla (en este caso botón),
y no es siempre en la primera pulsación. Te indico que uso C# en .Net
2003 (aunque lo he probado en .NET 2005 también) y XP (por si tiene
que ver al hacer uso del API).
Otra cosa, en el ejemplo se manda el foco buscando la ventana activa
según la clase y el título de la ventana, me pregunto si cada
aplicación construída en C# tiene una clase propia y si se puede
buscar por esa clase teniendo en cuenta que no va a haber dos
ejecuciones de la aplicación.
Gracias por tu paciencia y colaboración.
Respuesta Responder a este mensaje
#7 FrancisF.
03/03/2009 - 13:23 | Informe spam
Gracias Alex, ya he solucionado el problema, con poner delante del sendkeys
un Thread.Sleep(5) se me ha solucionado. Recordé que en otras ocasiones me
sirvió y probé, resultado exitoso el procedimiento.
Respuesta Responder a este mensaje
#8 oaoeoo
03/03/2009 - 19:19 | Informe spam
On 3 mar, 01:40, "Alex Lopez [MSFT]"
wrote:
Una de las soluciones (que utilizan la mayoría de las herramientas de
accesibilidad) es crear la ventana de la aplicación con el estilo
WS_EX_NOACTIVATE.  De esta forma el foco del teclado se mantiene en la
aplicación activa (por ejemplo Word) y por lo tanto los efectos de SendKeys
van directamente a esta sin que necesites buscar y activar la aplicación.
El problema de usar esto es que la ventana del teclado en pantalla no recibe
los mensajes del teclado real y si necesitas manejarlos también es necesario
que instales un KeyboardHook... pero si este teclado en pantalla se controla
sólo por ratón, touchscreen o una tecnología similar no debes tener ningún
problema.

Saludos,
-Alejandro

This posting is provided "AS IS" with no warranties, and confers no rights.
Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no
otorga ningún derecho.

wrote in message

news:



> (igual sale repetido el post, no estoy seguro de haber enviado el
> anterior)

> Tengo el siguiente código, tomado del ejemplo que me indicabas:
> [STAThread]
> static void Main()
> {
> Application.Run(new formTeclado());
> }
> [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
> public static extern IntPtr FindWindow(string lpClassName,
> string lpWindowName);

> // Activate an application window.
> [DllImport("USER32.DLL")]
> public static extern bool SetForegroundWindow(IntPtr hWnd);

> private void simpleButton6_Click(object sender, System.EventArgs e)
> {
> // Get a handle to the Wordulator application. The window class
> // and window name were obtained using the Spy++ tool.
> IntPtr Word = FindWindow("OpusApp", "Documento1 - Microsoft Word");

> // Verify that Wordulator is a running process.
> if (Word == IntPtr.Zero)
> {
> MessageBox.Show("Abrir el word en blanco");
> return;
> }

> // Mandar la tecla
> SetForegroundWindow(Word);
> SendKeys.SendWait("ATA LA JACA A LA ESTACA");

> }

> los resultados no son los esperados, sólo se envía el texto al word
> aleatoriamente, no en cada pulsación de la tecla (en este caso botón),
> y no es siempre en la primera pulsación. Te indico que uso C# en .Net
> 2003 (aunque lo he probado en .NET 2005 también) y XP (por si tiene
> que ver al hacer uso del API).
> Otra cosa, en el ejemplo se manda el foco buscando la ventana activa
> según la clase y el título de la ventana, me pregunto si cada
> aplicación construída en C# tiene una clase propia y si se puede
> buscar por esa clase teniendo en cuenta que no va a haber dos
> ejecuciones de la aplicación.
> Gracias por tu paciencia y colaboración.- Ocultar texto de la cita -

- Mostrar texto de la cita -



Al final lo solucíoné poniendo un Thread.Sleep(5) antes del envío de
la tecla y funcionó, oh wait!
Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida