Pregunta

he desarrollado una OSK bastante simple para nuestra aplicación de kiosco. Funciona mediante la apertura de los eventos disparados por onfocus cuadros de texto en nuestra aplicación .NET. El problema es, que estamos tratando de integrarse con un único servicio de inicio de sesión que significa que abriremos un control WebBrowser para manejar la autenticación de la tercera parte. Puesto que los cuadros de texto de la página de inicio de sesión único están dentro del control del navegador, no estoy del todo seguro de la mejor manera de utilizar el OSK existente, o si incluso puede.

Mis pensamientos iniciales son intentar algún tipo de inyección de JavaScript con el fin de añadir eventos que mi aplicación puede responder. Entonces yo debería ser capaz de decir cuando un cuadro de texto recibe el foco, y abra el OSK. Una vez que el OSK está cerrado, puedo actualizar campo de formulario con el valor que se ha escrito. Mi problema con esto es que parece ser bastante frágiles. Un cambio en html / js en la página de inicio de sesión único podría estropear el proceso de inicio de sesión para todos los quioscos.

La otra opción que veo es desechar el OSK tengo y utilizar un nivel inferior. El problema que veo con este enfoque es la mala programabilidad del software OSK me parece estar encontrando. Me esencialmente necesario para poner en marcha una tercera parte exe cada vez que necesitaba para conseguir la entrada de teclado del usuario y no parecería tan suave como de una integración que pude conseguir con la solución existente.

Podría seguir con una mezcla de los dos, usando nuestra OSK para los controles WinForms normales y cambiar a la tercera OSK partido siempre que necesito utilizar el WebControl, pero creo que todo el mundo podía ver el problema con este enfoque.

Cualquier consejo / sugerencias sobre qué camino tomar, y cualquier ayuda en la implementación de un javascript inyección genérica que me permita usar mi OSK existente sería genial!

¿Fue útil?

Solución

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.ObjectForScripting = this;
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LoadComplete);
    webBrowser1.Navigate("http://www.google.com");
}

public void LoadComplete(object sender, WebBrowserDocumentCompletedEventArgs args)
{
    foreach(HtmlElement input in webBrowser1.Document.GetElementsByTagName("input"))
    {
        if (input.GetAttribute("type").ToLower() == "text")
        {
            input.Click += new HtmlElementEventHandler(Clicked);
        }
    }
}

public void Clicked(object sender, HtmlElementEventArgs args)
{
    // Show OSK, Get Results Text
        (sender as HtmlElement).SetAttribute("value", oskText);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top