2009-05-30 238 views
1

我爲我們的信息亭應用程序開發了一個相當簡單的OSK。它通過在我們的.net應用程序中的文本框觸發的onfocus事件打開。問題是,我們正在嘗試與單點登錄服務集成,這意味着我們將打開一個webbrowser控件來處理第三方身份驗證。由於SSO頁面的文本框位於瀏覽器控件中,因此我不完全確定使用現有OSK的最佳方式,或者甚至可以。.NET Kiosk屏幕鍵盤

我最初的想法是嘗試某種JavaScript注入以添加我的應用程序可以響應的事件。然後,我應該能夠知道文本框何時獲得焦點並打開OSK。一旦OSK關閉,我可以用鍵入的值更新表單域。我的問題似乎很脆弱。在SSO頁面上的html/js更改可能會導致所有信息亭的登錄過程變得很糟糕。

我看到的另一個選項是廢除我擁有的OSK並使用較低級別的OSK。我用這種方法看到的問題是我似乎發現的OSK軟件的可編程性差。當我需要從用戶那裏獲得鍵盤輸入時,我基本上需要啓動一個第三方exe,並且看起來不像我現有解決方案那樣能夠實現整合。

我可以將兩者混合使用,使用我們的OSK用於正常的winforms控件,並在需要使用webcontrol時切換到第三方OSK,但我認爲每個人都可以看到這種方法的問題。

任何意見/建議走在哪條路上,以及任何有關實施通用JavaScript注入以幫助我使用現有OSK的幫助都很棒!

回答

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