2016-01-15 2 views
0

У меня есть приложение winforms C# с элементом управления WebBrowser, встроенным для автоматизации веб-сайта. Мне нужно, чтобы посылал программно клавиатурные штрихи из приложения в встроенный элемент управления WebBrowser , даже если приложение скрыто или не сфокусировано. Установка текста в текстовые поля HTML обычно работает, но иногда нет (т. Е. HTML-форма с проверкой AngularJS игнорирует ее, поскольку это не реальная типизация, я полагаю).Моделирование реального нажатия клавиш на неактивном управлении веб-браузером

Я провел 2 недели поиска и пробуя различные approches:

  • SendInput или SendKeys: отлично работает только тогда, когда приложение на передний план (не хорошо).

  • Подъем событий OnKeyDown и OnKeyPress: не работает для меня на уровне формы и на уровне управления WebBrowser.

  • Поднятие keydown, keypress, события с клавиатурой с JQuery в DOM: нет успеха.

Есть ли вообще какие-либо решения? Thanks

ответ

0

После многих проб и ошибок найдено решение. Механизм проверки формы AngularJS ожидает события «изменения» (а не для keydown, keyup, keypress). Для запуска этого события было непросто (JQuery.trigger не выполнял эту работу). Я ввел в функцию WebBrowser следующую функцию и затем вызвал ее.

setInputText = function (id, str, x) { 
 
    var el = $('#' + id); 
 
    if (typeof x === "undefined") { 
 
     x = 0; 
 
     el.focus(); 
 
    } 
 
    if (x >= str.length) { 
 
     el.blur(); 
 
     return; 
 
    } 
 
    
 
    var c = str.charAt(x); 
 
    el.val(el.val() + c); 
 

 
    //This is the magic: trigger change event in pure JS 
 
    var evt = document.createEvent("HTMLEvents"); 
 
    evt.initEvent("change", false, true); 
 
    el[0].dispatchEvent(evt);   
 

 
    //type each character every 75ms 
 
    setTimeout(function() { setInputText(id, str, ++x); }, 75); 
 
    return; 
 
}

Смежные вопросы