Ayuda Libreria WaitPixelColor Topic is solved

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.
Daenerys

Ayuda Libreria WaitPixelColor  Topic is solved

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"
A_AhkUser
Posts: 879
Joined: 06 Mar 2017, 16:18
Location: France

Re: Ayuda Libreria WaitPixelColor

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!
Daenerys

Re: Ayuda Libreria WaitPixelColor

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%
A_AhkUser
Posts: 879
Joined: 06 Mar 2017, 16:18
Location: France

Re: Ayuda Libreria WaitPixelColor

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
Daenerys

Re: Ayuda Libreria WaitPixelColor

19 Nov 2017, 14:27

Fantastico. Muchisimas gracias!

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

Un saludo

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 2 guests