Ayuda Libreria WaitPixelColor

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Ayuda Libreria WaitPixelColor

Re: Ayuda Libreria WaitPixelColor

Post by Daenerys » 19 Nov 2017, 14:27

Fantastico. Muchisimas gracias!

Me pongo a estudiar el codigo ahora mismo :) :) :)

Un saludo

Re: Ayuda Libreria WaitPixelColor

Post by A_AhkUser » 19 Nov 2017, 10:32

Puedes facilmente anadir la funcionalidad de tu script en la funcion si quieres.

Primero, modificando los parametros p_PosX y p_PosY de WaitPixelColor de tal manera que tengan una valor por defecto - lo que permite no especificarles a la llamada de la funcion - y por ejemplo aqui una "cadena de caracteres vacia":

Code: Select all

WaitPixelColor(p_DesiredColor,p_PosX="",p_PosY="",p_TimeOut=0,p_GetMode="",p_ReturnColor=0) { ; definicion de la funcion
; ...
}
WaitPixelColor(colorQueBuscar,,, tiempoQueEsperarEnSegundos*1000, modo) ; llamada de la funcion que no especifica 'x' y 'y'
Asi, solo necessita despues comprobar en el cuerpo de la definicion de la funcion WaitPixelColor si x y y han sido especificados al la llamada de la funcion:

Code: Select all

usarPuntero := ((p_PosX = "") and (p_PosY = "")) ; usarPuntero vale true si p_PosX y p_PosY no ha sido especificados
Y si usarPuntero vale true, llamamos MouseGetPos y utilizamos sus valores en el loop para compensar la falta de los dos parametros:

Code: Select all

if (usarPuntero) ; si usarPuntero vale true...
	MouseGetPos, p_PosX, p_PosY ; ...la funcion utiliza en lugar los 'x' y 'y' de la posicion del puntero al la llamada de PixelGetColor abajo
PixelGetColor, l_OutputColor, %p_PosX%, %p_PosY%, %p_GetMode%
Finalmente, una otra cosita a pesar de todo importante es de modificar el CoordMode del raton para que concuerda que lo del Pixel - para ese propósito podemos utilzar A_CoordModePixel:

Code: Select all

CoordMode, Mouse, %A_CoordModePixel% ;  A_CoordModePixel es una variable interna de AutoHotkey que continene el valor actual de la coordmode pixel: de modo que PixelGetColor y MouseGetPos busca segun los mismos parametros

Lo mismo script con esta foncionalidad; tirara un MsgBox tan pronto como encontre el color si el raton lo esta sobrevolando (y antes de que se haya agotado el tiempo):

Code: Select all

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
#SingleInstance, force


CoordMode, Pixel, Screen

; ---------------------- variables: modificales a tu eleccion ----------------------
colorQueBuscar := "0xFF0000" ; rojo en R(ed)G(reen)B(blue) prueba con este color picker por ejemplo: https://duckduckgo.com/?q=color+picker+%23ff0000&ia=answer
modo := "RGB"
; x := 467
; y := 256
tiempoQueEsperarEnSegundos := 4
; ----------------------------------------------------------
return

!z:: ; ALT+Z
valor := WaitPixelColor(colorQueBuscar,,, tiempoQueEsperarEnSegundos*1000, modo) ; probamos sin especificar 'x' y 'y' para utilzar los del puntero...
; valor := WaitPixelColor(colorQueBuscar, x, y, tiempoQueEsperarEnSegundos*1000, modo)
if (valor = 0) ; si el color ha sido encontrado antes de que se agote el tiempo la funcion devuelve 0
	MsgBox, color encontrada
else if (valor = 1) ; si surgió un problema
	MsgBox, surgió un problema
else if (valor = 2) ; si se ha agotado el tiempo la funcionn devuelve dos
	MsgBox, el color no ha sido encontrado - especialmente: se ha agotado el tiempo
return


WaitPixelColor(p_DesiredColor,p_PosX="",p_PosY="",p_TimeOut=0,p_GetMode="",p_ReturnColor=0) {
CoordMode, Mouse, %A_CoordModePixel% ;  A_CoordModePixel es una variable interna de AutoHotkey que continene el valor actual de la coordmode pixel: de modo que PixelGetColor y MouseGetPos busca segun los mismos parametros
    l_Start := A_TickCount
	usarPuntero := ((p_PosX = "") and (p_PosY = "")) ; if x and y no ha sido recibidos, usarPuntero vale true
    Loop {
		if (usarPuntero) ; si usarPuntero vale true...
			MouseGetPos, p_PosX, p_PosY ; ...la funcion utiliza en lugar los 'x' y 'y' de la posicion del puntero
        PixelGetColor, l_OutputColor, %p_PosX%, %p_PosY%, %p_GetMode%
        If ( ErrorLevel )
            Return ( p_ReturnColor ? l_OutputColor : 1 ) ; si p_ReturnColor no ha sido especificado, devuelve 1
        If ( l_OutputColor = p_DesiredColor )
            Return ( p_ReturnColor ? l_OutputColor : 0 ) ; ...si p_ReturnColor no ha sido especificado, devuelve 0
        If ( p_TimeOut ) && ( A_TickCount - l_Start >= p_TimeOut ) ; si p_TimeOut ha sido especificado y si ha transcurrido p_TimeOut milisegundos...
            Return ( p_ReturnColor ? l_OutputColor : 2 ) ; ...si p_ReturnColor no ha sido especificado, devuelve 2
    }
}
; https://github.com/MasterFocus/AutoHotkey/blob/master/Functions/WaitPixelColor/WaitPixelColor.ahk

Re: Ayuda Libreria WaitPixelColor

Post by Daenerys » 19 Nov 2017, 05:51

Muchas Gracias por tu ayuda A_AhkUser
Me ha servido para entender mejor el funcionamiento de la libreria y para seguir adelante con mi formación en todo esto.

Dejo este pequeño script para saber posicion y color del puntero en sistema por defecto (no RGB)

MouseGetPos, x , y
PixelGetColor, OutputVar, %x%, %y%
MsgBox %OutputVar%, %x%, %y%

Re: Ayuda Libreria WaitPixelColor

Post by A_AhkUser » 18 Nov 2017, 22:08

Hola Daenerys,
Alguien me puede ayudar con el uso de esta libreria ??
Por ejemplo:

Code: Select all

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
#SingleInstance, force


CoordMode, Pixel, Screen

; ---------------------- variables: modificales a tu eleccion ----------------------
colorQueBuscar := "0xFF0000" ; rojo en R(ed)G(reen)B(blue) prueba con este color picker por ejemplo: https://duckduckgo.com/?q=color+picker+%23ff0000&ia=answer
modo := "RGB"
x := 467
y := 256
tiempoQueEsperarEnSegundos := 4
; ----------------------------------------------------------
return

!z:: ; ALT+Z
valor := WaitPixelColor(colorQueBuscar, x, y, tiempoQueEsperarEnSegundos*1000, modo)
if (valor = 0) ; si el color ha sido encontrado antes de que se agote el tiempo la funcion devuelve 0
	MsgBox, color encontrada
else if (valor = 1) ; si surgió un problema
	MsgBox, surgió un problema
else if (valor = 2) ; si se ha agotado el tiempo la funcionn devuelve dos
	MsgBox, el color no ha sido encontrado - especialmente: se ha agotado el tiempo
return


WaitPixelColor(p_DesiredColor,p_PosX,p_PosY,p_TimeOut=0,p_GetMode="",p_ReturnColor=0) {
    l_Start := A_TickCount
    Loop {
        PixelGetColor, l_OutputColor, %p_PosX%, %p_PosY%, %p_GetMode%
        If ( ErrorLevel )
            Return ( p_ReturnColor ? l_OutputColor : 1 )
        If ( l_OutputColor = p_DesiredColor )
            Return ( p_ReturnColor ? l_OutputColor : 0 )
        If ( p_TimeOut ) && ( A_TickCount - l_Start >= p_TimeOut )
            Return ( p_ReturnColor ? l_OutputColor : 2 )
    }
}
; https://github.com/MasterFocus/AutoHotkey/blob/master/Functions/WaitPixelColor/WaitPixelColor.ahk
Suerte!

Ayuda Libreria WaitPixelColor

Post by Daenerys » 18 Nov 2017, 12:43

Hola

Alguien me puede ayudar con el uso de esta libreria ?? como puedo saber la coordmode pixel y screen para añadir a WaitPixelColor(x,x,x) ??

Muchas Gracias

#Include C:\Users\Daenerys\Desktop\WaitPixelColor.ahk
z::
Run, "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
CoordMode, Pixel, Screen
WaitPixelColor()
Sleep 1000
Run, "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"

Top