es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Bucle de PixelSearch en AHK

Estoy tratando de hacer que mi script de AHK funcione.
Básicamente quiero encontrar una fila de x píxeles con el color 0x26FDFD (BGR). Pero no conozco lo suficiente el lenguaje de programación AHK como para pensar en una manera inteligente, limpia y sencilla de programar ese bucle, donde el punto de inicio se modificará basado en las últimas coordenadas encontradas.

Sin embargo, esto es lo que tengo hasta ahora:

SysGet, VirtualWidth, 78
SysGet, VirtualHeight, 79

;Color que se busca:
ColorVar := 0x26FDFD

i:=0
while i < 10
{
    PixelSearch, FoundX, FoundY, 0, 0, VirtualWidth, VirtualHeight, %ColorVar%, 3, Fast
    if (ErrorLevel = 2)
    {
        MsgBox No se pudo realizar la búsqueda.
        return
    }
    else if (ErrorLevel = 1)
    {
        MsgBox El color no se pudo encontrar en la pantalla.
        return
    }
    else
    {
        MouseMove, %FoundX%, %FoundY%
        MsgBox Se encontró un píxel en %FoundX%x%FoundY%.
        ;return
    }

    i++
}

Una pregunta un poco estúpida y básica, pero de alguna manera no puedo resolverlo.

Tags:  

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Autohotkey, puedo ayudarte a modificar tu código para buscar filas de píxeles con el color 0x26FDFD. Uno de los enfoques es utilizar un bucle anidado para buscar filas de píxeles con el color especificado. Aquí tienes un ejemplo de código:

    SysGet, VirtualWidth, 78
    SysGet, VirtualHeight, 79
    
    ; Color a buscar:
    ColorVar := 0x26FDFD
    foundRow := false
    lastY := 0
    
    while !foundRow
    {
        ; Buscar el primer píxel con el color especificado desde la última posición encontrada
        PixelSearch, FoundX, FoundY, 0, lastY, VirtualWidth, VirtualHeight, %ColorVar%, 3, Fast
        if (ErrorLevel = 2)
        {
            MsgBox No se pudo realizar la búsqueda.
            return
        }
        else if (ErrorLevel = 1)
        {
            MsgBox No se encontró el color en la pantalla.
            return
        }
        else
        {
            lastY := FoundY + 1  ; Actualizar la última posición encontrada a la siguiente fila
            rowFound := true
    
            ; Buscar el resto de píxeles en la misma fila
            for (i := FoundX + 1; i < VirtualWidth; i++)
            {
                PixelGetColor, pixelColor, i, FoundY
                if (pixelColor <> ColorVar)
                {
                    rowFound := false
                    break
                }
            }
    
            if (rowFound)
            {
                ; Se encontró la fila con el color especificado
                rowStartX := FoundX
                rowEndX := i - 1
                rowY := FoundY
                MsgBox Se encontró una fila de píxeles con el color especificado. StartX: %rowStartX%, EndX: %rowEndX%, Y: %rowY%.
                ; Aquí se pueden realizar acciones adicionales
                return
            }
            else
            {
                ; La posición actual no es el inicio de la fila, continuar buscando desde la siguiente posición
                continue
            }
        }
    
        ; Si el bucle llega hasta aquí, significa que no se encontró ninguna fila con el color especificado
        MsgBox No se encontró una fila de píxeles con el color especificado.
        return
    }
    

    Este código utiliza un bucle while para buscar repetidamente filas de píxeles con el color especificado. Dentro del bucle, se utiliza un bucle anidado for para buscar el resto de píxeles en la misma fila, empezando desde el primer píxel con el color especificado encontrado por PixelSearch. Si todos los píxeles en la fila tienen el color especificado, el bucle se detiene y las coordenadas de la fila se almacenan en las variables rowStartX, rowEndX y rowY. Si la fila no se encuentra, el bucle while continúa buscando desde la siguiente posición. Si no se encuentra ninguna fila después de algunas iteraciones, el bucle se detiene y se muestra un mensaje.

    Ten en cuenta que este código asume que la fila de píxeles con el color especificado es continua y horizontal. Si la fila puede tener espacios o ser diagonal, el código debe ser modificado en consecuencia.

Comments are closed.