Autor
|
Tema: [AutoIt] Solución a un bucle? (Leído 7,502 veces)
|
MeCraniDOS
Desconectado
Mensajes: 337
Sr. Glass
|
Hola, bueno pues tengo un problema, tengo este código: Func MoverIcono() While $VarBucle = True $X_Escritorio = 0 $Y_Escritorio = 0 $Area_Escr = _ImageSearch('Area.bmp', 0, $X_Escritorio, $Y_Escritorio, 0) if $Area_Escr = 1 Then MouseMove($X_Escritorio, $Y_Escritorio, 5) MouseClick("left") if $BuscarIcono1 = True or $BuscarIcono2 = True Do $X = 0 $Y = 0 if $BuscarIcono1 = True Then $Icono1 = _ImageSearch('img/Icono1.bmp', 0, $X, $Y, 0) While $Icono1 = 1 MouseMove($X, $Y, 5) MouseClick("left") Sleep(2000) WEnd EndIf if $BuscarIcono2 = True Then $Icono2 = _ImageSearch('img/Icono2.bmp', 0, $X, $Y, 0) While $Icono2 = 1 MouseMove($X, $Y, 5) MouseClick("left") Sleep(2000) WEnd EndIf Until $Icono1 = 0 or $Icono2 = 0 Else Sleep(10000) Endif Else ; (Comentario) "Error": No se ha encontrado el area del mapa Endif WEnd EndFunc
El código en si funciona bien, el error que da para mi es que no hace exactamente lo que yo quiero, y no se como arreglarlo...
La función lo que hace es buscar el área que yo le indico, (las coordenadas del área del escritorio están cambiadas), y va clickando en esa zona cada 10 segundos, y justo cuando da el click busca los iconos, pero en esos 10 segundos del Sleep(10000) no hace nada
Lo que quiero es que haga click en el área que le indico, y en esos 10 segundos, antes del siguiente click este buscando los iconos, es decir, que si activo la opción del icono1, este indefinidamente buscando ese icono y moviendo y clickando, y a los 10 segundos, haga click en otras coordenadas del escritorio y siga buscando hasta pasados los próximos 10 segundos, etc
Espero que puedan ayudarme, creo que no hace falta saber de este lenguaje para contestar, cualquier bucle es igual sea en el lenguaje que sea
Saludos
|
|
|
En línea
|
"La física es el sistema operativo del Universo" -- Steven R Garman
|
|
|
Stakewinner00
|
Si lo que quieres es que haga una cosa al mismo tiempo que espera los 10s me temo que necesitaras un multithread, en C++ no es especialmente complicado pero claro tiene que ser de scripting, no?
|
|
|
En línea
|
|
|
|
MeCraniDOS
Desconectado
Mensajes: 337
Sr. Glass
|
multithread
Mirare a ver como funciona e intentare investigar
|
|
|
En línea
|
"La física es el sistema operativo del Universo" -- Steven R Garman
|
|
|
#!drvy
|
Y porque simplemente no creas una funcion que se encargue del click y que vaya midiendo el tiempo.
Osease, sustituyes MouseClick (y MouseMove si hace falta) por una función que por muchas veces que la llamen, solo haga 1 click cada 10 segundos.
Saludos
|
|
|
En línea
|
|
|
|
MeCraniDOS
Desconectado
Mensajes: 337
Sr. Glass
|
Y porque simplemente no creas una funcion que se encargue del click y que vaya midiendo el tiempo.
Osease, sustituyes MouseClick (y MouseMove si hace falta) por una función que por muchas veces que la llamen, solo haga 1 click cada 10 segundos.
Saludos
Porque esa función ya esta, si pones:MouseClick("left", $X_Escritorio, $Y_Escritorio, 1, 10000)
Clicka cada 10 segundos, pero estamos en las mismas, no hace lo que esta a continuación, espera 10 segundos, clicka y pasa a la siguiente función
|
|
|
En línea
|
"La física es el sistema operativo del Universo" -- Steven R Garman
|
|
|
#!drvy
|
1. No hagas sleep. No es lo mismo comprobar si la ultima llamada que se hizo fue hace 10 segudos que esperar 10 segundos para recibir la proxima llamada.
2. La función invocala desde el while y pasale los parametros (cursor x,y)
Edit: Obviamente lo que te recomienda stake es mucho mejor y mas optimizado pero si lo quieres hacer sin mas a lo burro... es lo que haria xD
Saludos
|
|
« Última modificación: 21 Agosto 2013, 03:33 am por drvy »
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
hola usa
DllCallbackRegister
saludos.
si explicas mejor lo que quieres hacer te doy una mano porque la verdad no entendí nada :S
|
|
« Última modificación: 21 Agosto 2013, 04:21 am por Danyfirex »
|
En línea
|
|
|
|
MeCraniDOS
Desconectado
Mensajes: 337
Sr. Glass
|
1. No hagas sleep. No es lo mismo comprobar si la ultima llamada que se hizo fue hace 10 segudos que esperar 10 segundos para recibir la proxima llamada.
He descartado usar el Sleep me temo que necesitaras un multithread
He estado mirando y AutoIt no permite multithread si explicas mejor lo que quieres hacer te doy una mano porque la verdad no entendí nada :S
La función lo que hace es buscar las coordenadas en el escritorio, si no selecciono ninguna opción, mueve el ratón cada 10 segundos, (le paso un valor random, pero quité eso porque no hacia falta aquí) $X_Escritorio = 0 $Y_Escritorio = 0
En el caso de que $BuscarIcono1 o $BuscarIcono2 estén activadas, lo que quiero es que haga click en la pantalla, y mientras espera 10 segundos hasta volver a dar el click, escanee la pantalla buscando los iconos, así sucesivamente hasta que finalice la función.
Ahora lo que hace es, dar click, escanear la pantalla y esperar 10 segundos sin hacer nada
|
|
|
En línea
|
"La física es el sistema operativo del Universo" -- Steven R Garman
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
Podrías hacer algo así para saber cuando pasaron los 10 segundo y dar click. de lo contrario sigo buscando. Local $begin = TimerInit() Local $dif=0 while 1 $dif=TimerDiff($begin) if $dif >=10000 then msgbox(0,"","Hago clik") $begin = TimerInit() endif wend
saludos
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
AutoIt !!!----> Solucionado
Programación Visual Basic
|
-/lnkx/-
|
9
|
10,605
|
6 Junio 2008, 16:56 pm
por krackwar
|
|
|
[Autoit] Loop
Scripting
|
mubimeiquer
|
2
|
5,455
|
13 Febrero 2009, 16:36 pm
por gna08
|
|
|
Duda (Parar bucle con dato boolean) [bucle while]
Java
|
Dem0ny
|
5
|
18,300
|
17 Diciembre 2008, 17:43 pm
por Dem0ny
|
|
|
manual autoit
Scripting
|
leugimr
|
0
|
4,937
|
15 Octubre 2011, 18:54 pm
por leugimr
|
|
|
Problema con AutoIt 3
Programación General
|
EuroHack
|
1
|
2,883
|
30 Diciembre 2011, 18:07 pm
por EuroHack
|
|