Как смоделировать событие нажатия клавиши? - PullRequest
0 голосов
/ 26 мая 2011

Мне нужно что-то набрать в textbox внутри элемента управления веб-браузера.Простая установка значения не работает, потому что это не запускает javascript.

Итак:

  1. InvokeMember: я подумал, что могу использовать invokemember для этого (поскольку1008 *).Но в Google ничего не говорится о событиях клавиатуры.

  2. Сфокусируйте элемент и отправьте ключи элементу управления.Работает (Sendkeys.Send), но только если контроль активирован.Если я переключаюсь в другое окно, оно будет отправлять ключи полностью, но не туда, куда я хочу.

  3. Javaspript: есть ли способ узнать, какой javascript запускается, когда я изменяю значение текстового поля?Я не знаю много о javascript.Атрибуты элементов не имеют ничего общего с OnClick / OnKeyUp и т. Д.

Ответы [ 5 ]

1 голос
/ 29 мая 2011

Итак ... На случай, если кому-то будет интересно.

  1. InvokeMember не имеет ничего для нажатия клавиш.
  2. Невозможно отправить ключи на элемент управления.
  3. Существует способ "отправить ключи" с помощью iQuery, который ... является поддельным и плохо продуманным. Это не помогает в моем случае. И когда он делает «отправить ключ», «InvokeMember (« OnKeyUp »)» также работает.

Что возможно? Можно отправлять ключи в окно ... Теоретически можно отправлять ключи в неактивное окно (используя SendMessage () и PostMessage ()), но практически никто не сделал этого это с WinXP & x32 раза ...

Я не пробовал себя, но есть люди, которые смогли отправить ключи, используя «SendInput». Но это все равно бесполезно, потому что функция может отправлять только ключи в активное окно.

Итак ... SendKeys.Send (который, я полагаю, является оберткой для SendInput) все еще лучший способ обойти.

Решение

Я создал форму (окно) для своего веб-браузера. Я инициализирую его, но не использую «Показать». Затем я просто делаю эту форму активной прямо перед «SendKeys.Send» (не забудьте также сосредоточиться как на элементе (внутри элемента управления), так и на элементе управления (внутри формы). Так как формы для показа нет, пользователь ничего не замечает, а ключи переходят в правое окно. Если это необходимо, можно сохранить дескриптор окна, которое было активным ранее, и снова сделать его активным после отправки (чтобы фокус не терялся).

Резюме

Хотя я согласен с этим решением и буду его использовать, оно далеко от совершенства ... Если кто-нибудь найдет что-то лучшее, пожалуйста, дайте мне знать (даже в далеком будущем).

0 голосов
/ 07 марта 2018

Вы можете, для каждого персонажа, установить его и вызвать событие.В этом примере я вызываю событие нажатия клавиши.Вызовите событие для последнего введенного вами символа.

he.setAttibtute("value", "a");
KeyEventArgs kea = new KeyEventArgs(Keys.A);
he.InvokeMember("onkeypress", kea);

Где он находится: HtmlElement

0 голосов
/ 27 мая 2011

Об этом: «Javaspript. Есть ли способ узнать, что запускается JavaScript, когда я изменяю значение текстового поля? Я не знаю много о Java. Атрибуты элемента не имеют ничего общего с OnClick / OnKeyUp и т. Д. '

Для просмотра всего JavaScript вы можете использовать плагин Firebug для Firefox. Имеет соответствующую вкладку.

Подробнее: http://getfirebug.com/whatisfirebug/

Вы можете установить точку останова и просмотреть все переменные JavaScript, которые вы хотите.

0 голосов
/ 28 мая 2011

В случае, если кто-то столкнется с этим в поиске независимого от фреймворка способа запуска любого события HTML и мыши, посмотрите здесь: Как смоделировать щелчок мыши с помощью JavaScript?

0 голосов
/ 27 мая 2011

Для Java (не Javascript) вы не можете имитировать нажатия клавиш через DOM.Вам необходимо смоделировать щелчки в окнах чтения (см. Такие инструменты записи макросов, как Autohotkey)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...