Necesito escribir algo en un textbox dentro de un control de navegador web. Simplemente establecer el valor no funciona porque esto no ejecuta javascript.

Así que:

  1. InvokeMember: pensé que podría usar invokemember para esto (ya que hay InvokeMember("Click")). Pero google no dice nada sobre los eventos del teclado.

  2. Enfoque el elemento y luego envíe las teclas al control. Funciona (Sendkeys.Send), pero solo si el control está activado. Si cambio a otra ventana, enviará las llaves por completo, pero no a donde quiero.

  3. Javaspript: ¿Hay alguna forma de averiguar qué javascript se ejecuta cuando cambio el valor de un cuadro de texto? No sé mucho sobre javascript. Los atributos de los elementos no tienen algo como OnClick / OnKeyUp, etc.
0
Alena 26 may. 2011 a las 15:58

4 respuestas

La mejor respuesta

Entonces ... en caso de que alguien esté interesado.

  1. InvokeMember no tiene nada para presionar teclas.
  2. Es imposible enviar llaves al control.
  3. Hay una manera de "enviar claves" usando iQuery que ... es falso y está mal diseñado. No ayuda en mi caso. Y cuando hace "enviar clave", "InvokeMember (" OnKeyUp ")" también funciona.

¿Qué es posible? Es posible enviar claves a una ventana ... Teóricamente es posible enviar claves a una ventana inactiva (usando SendMessage () y PostMessage ()), pero prácticamente nadie lo ha hecho con éxito desde entonces. WinXP y x32 veces ...

No lo intenté yo mismo, pero hay personas que pudieron enviar claves usando "SendInput". Pero de todos modos esto es inútil, porque la función solo puede enviar claves a la ventana activa.

Entonces ... SendKeys.Send (que, supongo, es un contenedor para SendInput) sigue siendo la mejor manera de evitarlo.

Solución

Creé un formulario (ventana) para mi control de navegador web. Lo inicializo, pero no use "Mostrar". Luego, simplemente activo este formulario justo antes de "SendKeys.Send" (no se olvide de enfocarse tanto en el elemento (dentro del control) como en el control (dentro del formulario) también). Como no hay forma de mostrar, el usuario no nota nada y las teclas van a la ventana derecha. Si es necesario, es posible guardar el identificador de la ventana que estaba activo anteriormente y volverlo a activar después del envío (para que el foco no se pierda).

Resumen

Aunque estoy bien con esta solución y la usaré, está lejos de ser perfecta ... Si alguien encuentra algo mejor, hágamelo saber (incluso en un futuro lejano).

2
Amanda S 7 jul. 2011 a las 07:56

En caso de que alguien se encuentre con esto buscando una forma independiente del marco para disparar cualquier evento HTML y Mouse, eche un vistazo aquí: ¿Cómo simular un clic del mouse usando JavaScript?

0
Community 23 may. 2017 a las 11:50

Sobre esto: 'Javaspript. ¿Hay alguna manera de averiguar qué javascript se ejecuta cuando cambio un valor de textbox? No sé mucho sobre Java. Los atributos de Element no tienen algo como OnClick / OnKeyUp, etc. '

Para ver todos los javascript, puede usar el complemento firebug para firefox. Tiene la pestaña correspondiente.

Más información: http://getfirebug.com/whatisfirebug/

Puede configurar un punto de interrupción y ver todas las variables de JavaScript que desee.

0
sergzach 27 may. 2011 a las 11:12

Puedes, para cada personaje, configurarlo y llamar a un evento. En este ejemplo, estoy llamando al evento de pulsación de tecla. Llama al evento para el último personaje que escribiste.

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

Donde está el elemento HTML

0
Daniel Caraça 14 mar. 2018 a las 17:59