Ayuda con proceso araña de recorrido de BBDD
Publicado: 23 Ago 2011, 14:51
Hola a todos, autoit me esta siendo de gran ayuda para automatizar procesos tontos que muchas veces tenemos que hacer los humanos. Quería hacer una consulta para ver cual es la mejor estrategia para un problema que tenemos.
Os cuento
En un formulario de consulta del aplicativo que utilizamos se trata de introducir un numero en un campo indice, mandar un "TAB" en el mismo y esperar a que se ejecute un proceso automático que hace unas verificaciones, pasar al numero siguiente y así hasta miles de números mas adelante.
He conseguido hacer un bucle que haga la tarea:
Lo dejo ejecutado y mientras no toque el ratón o el teclado todo va bien ;)
El caso es que como tarda unos 30 segundos la verificación de cada numero quiero "instanciar" el proceso abriendo 2 veces la aplicación en pantalla y hacer un proceso que recorra hacia delante y otro hacia atrás.
Os enseño el código:
El caso es que el script de autoit no espera en "WinWaitActive" (cuando es un unico proceso si que va bien), a pesar que aun no ha terminado la verificacion, autoit continua con las siguientes ordenes haciendo que todo se solape y mandando los comandos no sobre donde se requería.
¿Puedo preguntar con algún comando acerca del estado de la ventana ("UNO" o "DOS") o proceso y me responda si esta "busy" o si ya le puedo enchufar el siguiente número dado que en este caso winwaitactive no funciona?
¿Se os ocurre algo que pueda hacer?
Mil gracias
PD:No utilizo Controlsend porque la cabrona de mi aplicación cuando le da la gana cambia los números de instancia de los campos Edit (por ejemplo [CLASS:Edit; INSTANCE:60] y en un rato se redibuja el formulario y pasa al 61) no se porqué.
Saludos
Os cuento
En un formulario de consulta del aplicativo que utilizamos se trata de introducir un numero en un campo indice, mandar un "TAB" en el mismo y esperar a que se ejecute un proceso automático que hace unas verificaciones, pasar al numero siguiente y así hasta miles de números mas adelante.
He conseguido hacer un bucle que haga la tarea:
Código: Seleccionar todo
$numeroinicial = InputBox("Seguridad", "Numero de entrada de comienzo verificacion.", "")
$numerofinal = InputBox("Seguridad", "numero final.", "")
If Not WinActive("Consulta de documento","") Then WinActivate("Consulta de documento","")
For $i = $numeroinicial To $numerofinal
Sleep(150)
Send($i)
Sleep(150)
Send("{tab}")
Sleep(150)
If Not WinActive("Consulta de documento","") Then WinActivate("Consulta de documento","")
WinWaitActive("Consulta de documento")
Sleep(150)
Send("{SHIFTDOWN}{TAB}")
Send("{SHIFTUP}")
Next
El caso es que como tarda unos 30 segundos la verificación de cada numero quiero "instanciar" el proceso abriendo 2 veces la aplicación en pantalla y hacer un proceso que recorra hacia delante y otro hacia atrás.
Os enseño el código:
Código: Seleccionar todo
$numeroinicial = InputBox("Seguridad", "Numero de entrada de comienzo de verificacion.", "")
$numerofinal = InputBox("Seguridad", "numero final.", "")
;Cambio el titulo de cada una de las ventanas para poder trabajar con ellas
If Not WinActive("Consulta de documento","") Then WinActivate("Consulta de documento","")
$tmpTitle = WinGetTitle("Consulta de documento")
WinSetTitle($tmpTitle,"","UNO")
If Not WinActive("Consulta de documento","") Then WinActivate("Consulta de documento","")
$tmpTitle = WinGetTitle("Consulta de documento")
WinSetTitle($tmpTitle,"","DOS")
$i2 = $numerofinal
For $i = $numeroinicial To $numerofinal
; Proceso creciente
If Not WinActive("UNO","") Then WinActivate("UNO","")
WinWaitActive("UNO")
Sleep(1000)
Send("{SHIFTDOWN}{TAB}")
Send("{SHIFTUP}")
Sleep(150)
Send($i)
Sleep(150)
Send("{tab}")
Sleep(150)
; Proceso numero 2 decreciente
If Not WinActive("DOS","") Then WinActivate("DOS","")
Sleep(500)
WinWaitActive("DOS")
Sleep(1000)
Send("{SHIFTDOWN}{TAB}")
Send("{SHIFTUP}")
Sleep(150)
; Iterador que decrece
$i2 = $i2-1
Send($i2)
Sleep(150)
Send("{tab}")
Sleep(150)
Next
¿Puedo preguntar con algún comando acerca del estado de la ventana ("UNO" o "DOS") o proceso y me responda si esta "busy" o si ya le puedo enchufar el siguiente número dado que en este caso winwaitactive no funciona?
¿Se os ocurre algo que pueda hacer?
Mil gracias
PD:No utilizo Controlsend porque la cabrona de mi aplicación cuando le da la gana cambia los números de instancia de los campos Edit (por ejemplo [CLASS:Edit; INSTANCE:60] y en un rato se redibuja el formulario y pasa al 61) no se porqué.
Saludos