elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [AutoIt] Solución a un bucle?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [AutoIt] Solución a un bucle?  (Leído 7,499 veces)
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
[AutoIt] Solución a un bucle?
« en: 20 Agosto 2013, 21:12 pm »

Hola, bueno pues tengo un problema, tengo este código:

Código
  1. Func MoverIcono()
  2.  
  3.    While $VarBucle = True
  4.  
  5. $X_Escritorio = 0
  6. $Y_Escritorio = 0
  7.  
  8.  
  9.        $Area_Escr = _ImageSearch('Area.bmp', 0, $X_Escritorio, $Y_Escritorio, 0)
  10.  
  11.        if $Area_Escr = 1 Then
  12. MouseMove($X_Escritorio, $Y_Escritorio, 5)
  13. MouseClick("left")
  14.  
  15.        if $BuscarIcono1 = True or $BuscarIcono2 = True
  16.  
  17.             Do
  18.  
  19. $X = 0
  20. $Y = 0
  21.  
  22.                if $BuscarIcono1 = True Then
  23.  
  24.             $Icono1 = _ImageSearch('img/Icono1.bmp', 0, $X, $Y, 0)
  25.  
  26.             While $Icono1 = 1
  27.       MouseMove($X, $Y, 5)
  28.       MouseClick("left")
  29.       Sleep(2000)
  30.             WEnd
  31.       EndIf
  32.  
  33.                if $BuscarIcono2 = True Then
  34.  
  35.             $Icono2 = _ImageSearch('img/Icono2.bmp', 0, $X, $Y, 0)
  36.  
  37.             While $Icono2 = 1
  38.       MouseMove($X, $Y, 5)
  39.       MouseClick("left")
  40.       Sleep(2000)
  41.             WEnd
  42.       EndIf
  43.  
  44.              Until $Icono1 = 0 or $Icono2 = 0
  45.  
  46.        Else
  47.  
  48. Sleep(10000)
  49.  
  50.        Endif
  51.  
  52.        Else
  53.  
  54.        ; (Comentario) "Error": No se ha encontrado el area del mapa  
  55.  
  56.        Endif
  57.  
  58.    WEnd
  59.  
  60. EndFunc
  61.  
  62.  

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


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: [AutoIt] Solución a un bucle?
« Respuesta #1 en: 20 Agosto 2013, 23:25 pm »

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 Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [AutoIt] Solución a un bucle?
« Respuesta #2 en: 20 Agosto 2013, 23:32 pm »

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


Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: [AutoIt] Solución a un bucle?
« Respuesta #3 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
En línea

MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [AutoIt] Solución a un bucle?
« Respuesta #4 en: 21 Agosto 2013, 00:27 am »

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:

Código
  1. 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


Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: [AutoIt] Solución a un bucle?
« Respuesta #5 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.

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 Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: [AutoIt] Solución a un bucle?
« Respuesta #6 en: 21 Agosto 2013, 04:18 am »

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 Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [AutoIt] Solución a un bucle?
« Respuesta #7 en: 21 Agosto 2013, 12:10 pm »

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:

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í)

Código
  1. $X_Escritorio = 0
  2. $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 Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: [AutoIt] Solución a un bucle?
« Respuesta #8 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.

Código
  1. Local $begin = TimerInit()
  2.  
  3. Local $dif=0
  4. while 1
  5.  
  6. $dif=TimerDiff($begin)
  7. if $dif >=10000 then
  8. msgbox(0,"","Hago clik")
  9. $begin = TimerInit()
  10. endif
  11. wend

saludos
En línea

MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [AutoIt] Solución a un bucle?
« Respuesta #9 en: 21 Agosto 2013, 15:09 pm »

Podrías hacer algo así para saber cuando pasaron los 10 segundo y dar click. de lo contrario sigo buscando.

Código
  1. Local $begin = TimerInit()
  2.  
  3. Local $dif=0
  4. while 1
  5.  
  6. $dif=TimerDiff($begin)
  7. if $dif >=10000 then
  8. msgbox(0,"","Hago clik")
  9. $begin = TimerInit()
  10. endif
  11. wend

saludos


Y de que me sirve eso?

http://www.autoitscript.com/autoit3/docs/functions/TimerInit.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  :-\ :-\
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AutoIt !!!----> Solucionado
Programación Visual Basic
-/lnkx/- 9 10,601 Último mensaje 6 Junio 2008, 16:56 pm
por krackwar
[Autoit] Loop
Scripting
mubimeiquer 2 5,455 Último mensaje 13 Febrero 2009, 16:36 pm
por gna08
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 18,300 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
manual autoit
Scripting
leugimr 0 4,937 Último mensaje 15 Octubre 2011, 18:54 pm
por leugimr
Problema con AutoIt 3
Programación General
EuroHack 1 2,883 Último mensaje 30 Diciembre 2011, 18:07 pm
por EuroHack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines