2009-05-30 4 views
1

Я разработал довольно простой OSK для нашего приложения для киосков. Он работает, открывая события onfocus, запущенные текстовыми полями в нашем приложении .net. Проблема в том, что мы пытаемся интегрироваться с единой службой регистрации, что означает, что мы будем открывать элемент управления webbrowser для обработки аутентификации сторонней стороны. Поскольку текстовые поля для страницы единого входа находятся внутри элемента управления браузера, я не совсем уверен, что лучший способ использовать существующую OSK, или если я даже могу.Экранная клавиатура .NET Kiosk

Мои первоначальные мысли - попробовать какую-то инъекцию javascript, чтобы добавить события, на которые может реагировать мое приложение. Затем я должен быть в состоянии сказать, когда текстовое поле получает фокус, и откройте OSK. После закрытия OSK я могу обновить поле формы с введенным значением. Моя проблема заключается в том, что она кажется довольно хрупкой. Изменение html/js на странице SSO может испортить процесс входа для всех киосков.

Другой вариант, который я вижу, - это отказаться от OSK, который у меня есть, и использовать более низкий уровень. Проблема, которую я вижу при таком подходе, - это низкая программируемость программного обеспечения OSK, которое, похоже, я нахожу. По сути, мне нужно было запустить сторонний exe всякий раз, когда мне нужно было вводить клавиатуру от пользователя, и это не казалось бы гладкой интеграцией, как я мог бы получить с существующим решением.

Я мог бы использовать сочетание двух, используя нашу OSK для обычных элементов управления winforms и переключаясь на стороннюю OSK, когда мне нужно использовать webcontrol, но я думаю, что каждый мог увидеть проблему с этим подходом.

Любые советы/предложения о том, куда идти, и любая помощь по внедрению общей инъекции 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); 
} 
Смежные вопросы