PDA

Ver la Versión Completa : Mandar pulsaciones de teclas a un TWebBrowser


cestradar
28-03-2008, 16:55:35
Hola, les explico mi problema

Tengo una aplicación que Llama a una página de un HW que monitorea el spam, llama la página, se autentifica, llama a otrá página y empieza a hacer refresh cada cierto tiempo registrado las diferencias entre cada refresco.

Todo esta bien la primera vez, ya que las pulsaciones de teclas las tengo dentro de un timer activo que paro inmediatamente cuando detecto que el código fuente ya no es el de la página de login. Lo puse en un timer por que vi que si mando las pulsaciones desde un evento de botón, el foco lo tiene la aplicación Delphi y no la página web, así que las teclas no llegan al control de la página.

Toda funciona bien por ocho horas, tiempo que el HW por si mismo cierra la aplicación y me regresa a la página de lógin. Si no se tocara para nada el servidor, se volvería a autentificar sin problemas ya que cuando cambia el fuente llamo otra vez a el timer que manda las pulsaciones, pero con el simple hecho de minimizar la aplicación hace que el foco ya no este en el ActiveX del TWebBrowser y las pulsaciones no llegan al control de la página, entonces se queda ciclado intentando loguearse mandando teclazos que nunca llegan a quien deben.

He intentado mandar el foco a la página con un simple WebBrowser.SetFocus y nada; tampoco colocando el contenido del <TITLE> en la función AppActivate. Se me han acabado las ideas.

¿Puede alguien orientarme?

cestradar
28-03-2008, 18:04:12
Aparentemente el problema era darle un tiempo para que se cargara la página en el TWebBrowser.

Con una secuencia como la de abajo, hasta ahora parece que funciona.

RefreshClick(Sender); <- Refrescar la página para darle el foco al ActiveX
Application.ProcessMessages;
sleep(3000); <-Esta es la pausa que necesitaba
WebBrowser1.SetFocus; <- Sin esto no manda las teclas al control de la página
Application.ProcessMessages;
SendKeys('login{TAB}password{ENTER}', False) ;

Espero que con esto quede, aunque si alguien sabe algún otro método le agradecería comentármelo.

Saludos