Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Mandar pulsaciones de teclas a un TWebBrowser (https://www.clubdelphi.com/foros/showthread.php?t=54733)

cestradar 28-03-2008 16:55:35

Mandar pulsaciones de teclas a un TWebBrowser
 
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.

Código:

  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


La franja horaria es GMT +2. Ahora son las 13:56:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi