función con PixelGetColor no funciona sobre flash

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
trycton
Mensajes: 4
Registrado: 08 Feb 2016, 01:44

función con PixelGetColor no funciona sobre flash

Mensaje por trycton »

Hola! Hace poco cree un pequeño script para automatizar una serie de acciones del ratón para un juego en flash. La idea es al siguiente:

- Una función(A) controla 30 pixeles individuales de la pantalla.
- Al detectar un cambio en alguno de esos pixeles, la función termina y llama a otra(B) que activa un movimiento de ratón.
- Una vez realizado el movieminto de ratón, se vuelve a llamar a la función incial.
- Se repite el proceso en forma de bucle.

¿El problema? Que sobre dicho juego (flash en navegador) no funciona. Error:

La función A devuelve valor '0' al no cumplirse ninguna de las premisas (no detecta ningún cambio en esos 30 pixeles). La función no está preparada para dar error, es decir, funciona a modo de bucle hasta que uno de sos 30 pixeles sea modificado. El caso es, que sobre un documento Word (por ejemplo) funciona perfectamente, hasta que no se modifica uno de esos pixeles, el script permanece en bucle esperando. Sin embargo, sobre el juego, la mayoria de veces la función devuelve false sin opción a ello.

¿Alguien sabría algo?
diego
Mensajes: 28
Registrado: 24 Jul 2013, 01:26

Re: función con PixelGetColor no funciona sobre flash

Mensaje por diego »

Desconozco como obtenes los colores en pantalla, pero tuve un caso parecido con un juego y hasta que no agrege

Opt("PixelCoordMode",0)

Al comienzo del codigo, me daba error en los colores.
Espero te ayude eso, y sino estaria bien que expliques como obtenes los colores o pongas el codigo aca
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: función con PixelGetColor no funciona sobre flash

Mensaje por Dany »

tambien puedes usar PixelChecksum.

Saludos
  • ............................................Imagen
    ......................................Imagen
trycton
Mensajes: 4
Registrado: 08 Feb 2016, 01:44

Re: función con PixelGetColor no funciona sobre flash

Mensaje por trycton »

diego escribió:Desconozco como obtenes los colores en pantalla, pero tuve un caso parecido con un juego y hasta que no agrege

Opt("PixelCoordMode",0)

Al comienzo del codigo, me daba error en los colores.
Espero te ayude eso, y sino estaria bien que expliques como obtenes los colores o pongas el codigo aca
Muy sencillo, con PixelGetColor(x,y). En este caso, no da error en los colores, simplemente la función termina arrojando 'false' en lugar de esperar en bucle hasta encontrar un cambio de color(true).
Dany escribió:tambien puedes usar PixelChecksum.

Saludos
El problema era el mismo. De hecho, la función inicial era con PixelChecksum pero no funciona correctamente, el problema era parecido. Entonces decidí usar el PixelGetColor y el problema persistía. Más adelante podría poner un ejemplo de la función...
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: función con PixelGetColor no funciona sobre flash

Mensaje por Chefito »

Dinos la página del juego flash e intentaremos ayudarte mejor. Y si das el código entero mejor.

Como utilizas la función pixelgetcolor?
Utiliza el programa espía AutoIt Windows Info que trae autoit y obtén el handle del control flash con la función controlgethandle para luego pasársela como parámetro a la función pixelgetcolor. Eso puede que te solucione lo de la obtención del color.

Si no te funciona eso, siempre te quedará las funciones udf gdiplus que trae autoit. Son bastante difíciles de utilizar, pero para detectar un color de un pixel no se necesita mucho :smt023 .

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 ;).
trycton
Mensajes: 4
Registrado: 08 Feb 2016, 01:44

Re: función con PixelGetColor no funciona sobre flash

Mensaje por trycton »

Esta sería la función, aquí se puede observar de que manera utilizo el PixelGetColor y el bucle que espera el cambio de color.

Código: Seleccionar todo

Func checkingColor()

    Sleep(1000)

   $n0 = PixelGetColor (593, 293)
   $n1 = PixelGetColor (575, 345)
   $n2 = PixelGetColor (625, 315)
   $n3 = PixelGetColor (670, 280)
   $n4 = PixelGetColor (603, 363)
   $n5 = PixelGetColor (650, 330)
   $n6 = PixelGetColor (690, 290)
   $n7 = PixelGetColor (625, 380)
   $n8 = PixelGetColor (670, 345)
   $n9 = PixelGetColor (740, 310)
   $n10 = PixelGetColor (675, 400)


   While ($n0 = PixelGetColor (593, 293) And $n1 = PixelGetColor (575, 345) And $n2 = PixelGetColor (625, 315) And $n3 = PixelGetColor (670, 280) And $n4 = PixelGetColor (603, 363) And $n5 = PixelGetColor (650, 330) And $n6 = PixelGetColor (690, 290) And $n7 = PixelGetColor (625, 380) And $n8 = PixelGetColor (670, 345) And $n9 = PixelGetColor (740, 310) And $n10 = PixelGetColor (675, 400))
	 Sleep(1000)
   WEnd

   If ($n0 <> PixelGetColor (593, 293)) Then
	 return 100
   EndIf

   If ($n1 <> PixelGetColor (575, 345)) Then
	  return 1
   EndIf

   If ($n2 <> PixelGetColor (625, 315)) Then
	 return 2
   EndIf

   If ($n3 <> PixelGetColor (670, 280)) Then
	 return 3
   EndIf

   If ($n4 <> PixelGetColor (603, 363)) Then
	 return 4
   EndIf

   If ($n5 <> PixelGetColor (650, 330)) Then
	 return 5
   EndIf

   If ($n6 <> PixelGetColor (690, 290)) Then
	return 6
   EndIf

   If ($n7 <> PixelGetColor (625, 380)) Then
	 return 7
   EndIf

   If ($n8 <> PixelGetColor (670, 345)) Then
	  return 8
   EndIf

   If ($n9 <> PixelGetColor (740, 310)) Then
	  Return 9
   EndIf

   If ($n10 <> PixelGetColor (675, 400)) Then
	  Return 10
   EndIf

MsgBox(0, "", "Error?")

EndFunc
Si se dan cuenta, al final hay un MsgBox que se ejecuta si ningún If se cumple, es decir, si la función funciona correctamente ese mensaje nunca debe de ejecutarse.
trycton
Mensajes: 4
Registrado: 08 Feb 2016, 01:44

Re: función con PixelGetColor no funciona sobre flash

Mensaje por trycton »

Solucionado. El problema estaba en el bucle while. Resulta que habia repetido el mismo número dos veces con coordenadas distintas dando lugar al error.

:smt023 :smt023
Responder