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
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?
Cita de: Stakewinner00 en 20 Agosto 2013, 23:25 PM
multithread
Mirare a ver como funciona e intentare investigar ;-)
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
Cita de: drvy en 20 Agosto 2013, 23:35 PM
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 :-\
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
hola
usa
DllCallbackRegister
saludos.
si explicas mejor lo que quieres hacer te doy una mano porque la verdad no entendí nada :S
Cita de: drvy en 21 Agosto 2013, 02:40 AM
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 :silbar:Cita de: Stakewinner00 en 20 Agosto 2013, 23:25 PM
me temo que necesitaras un multithread
He estado mirando y AutoIt no permite multithread :-(Cita de: Danyfirex en 21 Agosto 2013, 04:18 AM
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 :-\
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
Cita de: Danyfirex en 21 Agosto 2013, 14:43 PM
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
Y de que me sirve eso?
http://www.autoitscript.com/autoit3/docs/functions/TimerInit.htm (http://www.autoitscript.com/autoit3/docs/functions/TimerInit.htm)
http://www.autoitscript.com/autoit3/docs/functions/TimerDiff.htm (http://www.autoitscript.com/autoit3/docs/functions/TimerDiff.htm)
Lo que quiero es estar escaneando la pantalla buscando los iconos mientras pasan los 10 segundos :-\ :-\
Sera que no la capto. :rolleyes:
quieres buscar en la pantalla y ir clickeando cada 10 segundo?
Cita de: Danyfirex en 21 Agosto 2013, 15:15 PM
quieres buscar en la pantalla y ir clickeando cada 10 segundo?
si, el click cada 10 segundos, y en esos 10 segundos estar escaneando la pantalla
usa AdlibRegister.
AdlibRegister("Tufuncion",10*1000)
;aquí tu código para Buscar
Func Tufuncion()
;aqui el codigo para clikear.
EndFunc
saludos
Cita de: Danyfirex en 22 Agosto 2013, 13:46 PM
usa AdlibRegister.
Gracias, voy a probar :silbar:
HOLA!!!
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
Call MouseMove(X_Escritorio, Y_Escritorio, 5)
Call MouseClick("left")
If BuscarIcono1 = True Or BuscarIcono2 = True Then
Do
X = 0
Y = 0
Z = 0
A = 0
Icono1 = 0
If BuscarIcono1 = True Then
Icono1 = ImageSearch("img/Icono1.bmp", 0, X, Y, 0)
End If
If Icono1 = 1 Then
Call MouseMove(X, Y, 5)
Call MouseClick("left")
End If
icono2 = 0
If BuscarIcono2 = True Then
icono2 = ImageSearch("img/Icono2.bmp", 0, Z, A, 0)
End If
If icono2 = 1 Then
Call MouseMove(X, Y, 5)
Call MouseClick("left")
End If
Call Sleep(2000)
Loop Until Icono1 = 0 And icono2 = 0
Else
Sleep (10000)
End If
Else
' (Comentario) "Error": No se ha encontrado el area del mapa
End If
Wend
EndFunc
GRACIAS POR LEER!!!