Estoy queriendo escribir un teclado virtual, como el teclado de Windows en pantalla para PC con pantalla táctil. Pero estoy teniendo problemas con mi teclado virtual robando el foco de la aplicación que se está utilizando. El teclado de Windows en pantalla mantiene el enfoque en la aplicación actual incluso cuando el usuario hace clic en ella. ¿Hay alguna manera de hacer lo mismo con los formularios de Windows en C#?Haz un formulario no enfocable en C#
Lo único que puedo hacer por ahora es enviar un evento de teclado a una aplicación específica, como un bloc de notas en el siguiente código. Si pudiera hacer que el formulario no se pueda enfocar, podría obtener la ventana enfocada actual con GetForegroundWindow.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
private void button1_Click(object sender, EventArgs e)
{
IntPtr calculatorHandle = FindWindow("notepad", null);
SetForegroundWindow(calculatorHandle);
SendKeys.SendWait("111");
}
¿Hay alguna manera de hacerlo? ¿Alguna sugerencia de una mejor manera de tener el formulario de envío de eventos de teclado a la aplicación que se utiliza?
Gracias!
+1 buena idea/punteros. –
Gracias! Está a mitad de camino! Esa solución de artículo evita que mi formulario se centre, pero no impide que la otra aplicación pierda el foco. Es decir, cuando hago clic en mi aplicación, llego a la situación en la que ninguna aplicación tiene el foco. – Jandex
En caso de que los enlaces se vuelvan inválidos, su respuesta básicamente no contiene información.Resuma los recursos externos, para que su respuesta continúe siendo valiosa, incluso si los recursos fuera del sitio fallan. – IInspectable