Экранная клавиатура киоска .NET - PullRequest
1 голос
/ 31 мая 2009

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

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

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

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

Было бы замечательно, если бы у вас были какие-либо советы / предложения о том, как идти дальше, и любая помощь по внедрению универсального внедрения javascript, позволяющего мне использовать мой существующий OSK!

1 Ответ

0 голосов
/ 02 июня 2009
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);
}
...