2009-05-30 5 views
1

J'ai développé un OSK relativement simple pour notre application de kiosque. Il fonctionne en ouvrant sur les événements onfocus tirés par des zones de texte dans notre application .net. Le problème est que nous essayons d'intégrer un service de connexion unique, ce qui signifie que nous allons ouvrir un contrôle webbrowser pour gérer l'authentification tierce. Étant donné que les zones de texte pour la page SSO sont dans le contrôle du navigateur, je ne suis pas entièrement sûr de la meilleure façon d'utiliser l'OSK existant, ou si je peux même. Mes pensées initiales sont d'essayer une sorte d'injection javascript afin d'ajouter des événements auxquels mon application peut répondre. Ensuite, je devrais être capable de dire quand une boîte de texte reçoit le focus, et ouvrir l'OSK. Une fois l'OSK est fermé, je peux mettre à jour le champ de formulaire avec la valeur qui a été tapée. Mon problème avec ceci est qu'il semble être très fragile. Un changement de html/js sur la page SSO pourrait gâcher le processus de connexion pour tous les kiosques.Clavier à l'écran .NET Kiosk

L'autre option que je vois est d'abandonner l'OSK que j'ai et d'utiliser un niveau inférieur. Le problème que je vois avec cette approche est la mauvaise programmabilité du logiciel OSK que je semble trouver. Je devrais essentiellement lancer un exe de 3ème partie chaque fois que je devais obtenir l'entrée de clavier de l'utilisateur et il ne semblerait pas aussi lisse d'une intégration que je pourrais obtenir avec la solution existante. Je pourrais aller avec un mélange des deux, en utilisant notre OSK pour les contrôles winforms normales et passer à l'OSK 3ème partie chaque fois que j'ai besoin d'utiliser le webcontrol, mais je pense que tout le monde pourrait voir le problème avec cette approche.

Tous les conseils/suggestions sur la voie à suivre, et toute aide sur la mise en œuvre d'une injection javascript générique pour me permettre d'utiliser mon OSK existant serait génial!

Répondre

0
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); 
}