Ayuda con Pixelsearch

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Vermouth
Mensajes: 5
Registrado: 05 Dic 2011, 22:29

Ayuda con Pixelsearch

Mensaje por Vermouth »

$pixel = PixelSearch( 0, 0, 1023, 733, 0xFF0000 )
If IsArray ($pixel) = True Then
MouseMove($pixel [0], $pixel [1], 1)
EndIf

Lo que quiero hacer con pixelsearch, es que cada vez que aparezca el color 0xFF0000 aprete el F3 del teclado. 2 veces
con un tiempo.

y que se mantenga todo el tiempo haciendo lo mismo; aparece el color y apreta F3.

Ojala alguien me haya entendido Bien :smt002
Avatar de Usuario
arkcrew
Profesional del Autoit
Mensajes: 506
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España
Contactar:

Re: Ayuda con Pixelsearch

Mensaje por arkcrew »

Hola,

Para simular la pulsación de una tecla autoit cuenta con la función Send, si quieres presionar la tecla F3 pues haz algo asi Send("{F3}") con eso pulsarás la tecla F3, introduce eso dentro del código que ya tienes (en la condición) y si tu código es correcto, cuando aparezca ese pixel, pulsará F3, si necesitas pulsar 2 veces, pus manda la función send 2 veces.

Espero te sirva!

Saludos
Vermouth
Mensajes: 5
Registrado: 05 Dic 2011, 22:29

Re: Ayuda con Pixelsearch

Mensaje por Vermouth »

Gracias,
y para dejar que lo haga todo el tiempo.
que se repita siempre
Avatar de Usuario
arkcrew
Profesional del Autoit
Mensajes: 506
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España
Contactar:

Re: Ayuda con Pixelsearch

Mensaje por arkcrew »

Para que el script se mantenga en ejecución lo que puedes hacer es utilizar las funciones while-wend o do-until

si el script debe usarse siempre que exista un proceso, llamemoslo X puedes hacerlo de la siguiente manera

while processexist("x.exe")
código a ejecutar mientras el proceso está activo
wend

o

do
código a ejecutar mientras el proceso está activo
until processexist("x.exe") = 0

Con esto el programa se mantiene en ejecucuón siempre que un determinado proceso exista, si lo que quieres es que lo haga infinitamente, pues en la estructura del while, cambias la parte del proceso por un 1 lo cual generará un bucle infinito (hasta que el usuario cierre tu programa)

Si quieres mantener una tecla pulsada por varios segundos, la verdad no tengo ni puñetera idea de como va eso, he mirado en el foro de autoitscript a ver que tienen por ahi y estos son los temas que me han aprecido que tienen algo que ver, es cuestión de que les eches una ojeada:
http://www.autoitscript.com/forum/topic ... ss-script/
http://www.autoitscript.com/forum/topic ... for-macro/
http://www.autoitscript.com/forum/topic ... key-press/
http://www.autoitscript.com/forum/topic ... efinately/

Quizás no te sirvan o no resuelvan tu problema, pero bueno, es cuestión de que si algo no está por este foro, pruebes a buscarlo en el de autoitscript, yo la búsuqeda que he mandando al señor google ha sido: "keep a key pressed for indefinately on autoit", "keep a key pressed autoit" cosas por el estilo..

Espero te sea útil.

Un saludo!
Vermouth
Mensajes: 5
Registrado: 05 Dic 2011, 22:29

Re: Ayuda con Pixelsearch

Mensaje por Vermouth »

Muchas gracias, que soy nuevo en autoit, y ahora me voy a cabecear aprendiendo e intentar que resulte lo que quiero.

creo que no encontre un scrip hecho mas o menos de lo que quiero.

Ejemplo de lo que quiero; sin funciones:ni todos los comandos solo la idea:

Código: Seleccionar todo

star f12
pause f11
stop f10

in game tururulu
---loop (repetir)}
pixelsearch,0,0,1023,733,0xFF0000,15
0xFF0000
send f3
send f3
---{loop
Gracias arkcrew por info; es interesante lo que se puede hacer con el comando pixelsearch.
:smt039
jonuba
Mensajes: 14
Registrado: 01 Oct 2011, 05:24

Re: Ayuda con Pixelsearch

Mensaje por jonuba »

el la ayuda de autoit en español tienes casi todo el codigo que busca, busaca "HotKeySet" sin comias
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Ayuda con Pixelsearch

Mensaje por Ximorro »

El problema de PixelSearch es que para buscar en una zona tan grande puede ser un poco lento, pero bueno, la idea es esa, mira a ver cómo va.
Se puede hacer un bucle infinito, que pare sólo con el Hotkey, y cuando se detecta el pixel que haga el F3. Por cierto, con un solo Send se pueden repetir teclas, no hace falta hacerlo en dos líneas:
Send("{F3 2}")

Un código simple para hacer esto se haría así, se para con F11. Como no hacen falta las coordenadas del pixel simplifico el código, basta con ver si PixelSearch no devuelve error a 1:

Código: Seleccionar todo

HotKeySet("{F11}", "_Parar")

Global $Salir = False
Do
	PixelSearch(0, 0, 1023, 733, 0xFF0000)
	If Not @error Then Send("{F3 2}")
Until $Salir

Func _Parar()
	$Salir = True
EndFunc
Por cierto, el código que has puesto no es AutoIT... :smt002
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Vermouth
Mensajes: 5
Registrado: 05 Dic 2011, 22:29

Re: Ayuda con Pixelsearch

Mensaje por Vermouth »

Muchas gracias por la ayuda "Ximorro" y a los demas que me han ayudado.

pero sigo con preguntas como; (si son aclaradas saldria de bastantes dudas como para hacer algun script diferentes)
-Si quiero apretar F3 y luego F4 despues de reconocer el color tendria que poner lo mismo abajo del "send" por ejemplo;

Código: Seleccionar todo

PixelSearch(0, 0, 1023, 733, 0xFF0000)
  If Not @error Then Send{F3}
  If Not @error Then Send{F4}
-Y este script se repetiria cada vez que salga un color que me han puesto sobre funcion; (while-wend o do-until)

-Como tendria que poner en el buscador para ver una lista de que hace cada funcion o codigo cualquiera de autoit?
Si es que la hay, y sobre un codigo que puse... si, es de otro programa, por eso voy a buscar que hace cada llave o comando de autoit

Código: Seleccionar todo

HotKeySet("{F11}", "_Parar")

Global $Salir = False
Do
   PixelSearch(0, 0, 1023, 733, 0xFF0000)
   If Not @error Then Send("{F3 2}")
Until $Salir

Func _Parar()
   $Salir = True
EndFunc
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Ayuda con Pixelsearch

Mensaje por Chefito »

Vermouth escribió:-Si quiero apretar F3 y luego F4 despues de reconocer el color tendria que poner lo mismo abajo del "send" por ejemplo;Código: Seleccionar todoPixelSearch(0, 0, 1023, 733, 0xFF0000)  If Not @error Then Send{F3}  If Not @error Then Send{F4}-Y este script se repetiria cada vez que salga un color que me han puesto sobre funcion; (while-wend o do-until)
Piensa que el bucle se acaba justo cuando encuentra ese color. Por esa causa debes poner fuera del bucle (justo después de su finalización) la otra pulsación.
Y si quieres que esto también se repita, pues pones otro bucle dentro del bucle inicial.
Una solución podría ser esta:

Código: Seleccionar todo

HotKeySet("{F11}", "_Parar")

Global $Salir = False
Do
Do
   PixelSearch(0, 0, 1023, 733, 0xFF0000)
   If Not @error Then 
          Send("{F3}")
          ExitLoop
   endif
Until $Salir
if $Salir=false then Send("{F4}")
Until $Salir

Func _Parar()
   $Salir = True
EndFunc
Para controlar el tiempo de que debe de estar pulsada una tecla utiliza Opt para cambiar el valor de SendKeyDownDelay. Se pone en milisegundos. También te puede interesar los valores SendKeyDelay y SendAttachMode. Miralas en la ayuda que las explican muy bien :smt002 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Ayuda con Pixelsearch

Mensaje por Ximorro »

No sé si se refiere a apretar F4 al acabar el ciclo o ir presionando alternativamente F3-F4-F3-F4...
Si es lo segundo (y si no también te interesa saberlo) puedes poner todas las teclas que quieras en un mismo Send().
Así que para enviar F3 y F4 puedes hacer Send("{F3}{F4}")
Eso es equivalente a hacerlo por separado:
Send("{F3}")
Send("{F4}")


Pero NO es equivalente a lo que tú has puesto, pues @error se refiere al último comando ejecutado, por lo que tu segundo @error se está refiriendo al Send("{F3}"), y no al PixelSearh anterior.

Por favor ¡mírate la ayuda de Send! Descubrirás muchas cosas interesantes.

Para el tiempo de pulsación entre teclas mira las opciones que te indica Chefito. También se puede usar el comando Sleep() para parar un determinado número de milisegundos (en ese caso habrá que poner Send separados para cada tecla, si usas SendKeyDelay pueden estar juntas en un sólo Send, lo que es más cómodo)
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder