Что нового

PixelSearch для области экрана

Frost_Imp

looooseeeer
Сообщения
17
Репутация
0
Версия AutoIt: 3.

Описание:
Есть некое пространство на экране. В его правом верхнем углу есть кнопка "Закрыть", которая не имеет идетнификатора, она флэшевая. Чтобы на нее нажать - нужно найти последовательность пикселов, уникального цвета пикселов нет. Последовательность я нашел - 0xFFFFF2, 0xAB2F22, 0:rofl:4392C, 0xFFFFF2 (слева направо).
Пробовал воспользоваться найденным примером:
Код:
Opt("MouseCoordMode",2) 
opt("PixelCoordMode",2) 
Opt("MustDeclareVars", 1)
Dim $Color[4] = [0xFFFFF2, 0xAB2F22, 0xD4392C, 0xFFFFF2]
Dim $Shade[4] = [10, 10, 1500, 1000]
Example(10, 10, 1500, 1000)
Func Example($x1, $y1, $x2, $y2)
    Local $var = PixelSearch($x1, $y1, $x2, $y2, $Color[0], $Shade[0])
    If Not @error Then
        For $i = 1 To 3 Step 1
            $var = PixelSearch($var[0]+1, $var[1], $var[0]+1, $var[1], $Color[$i], $Shade[$i])
            If Not @error Then
                If $i = 3 Then
                    MouseMove($var[0], $var[1])
                    MsgBox(0,"","Found")
                Else
                    ContinueLoop
                EndIf
            Else
                MsgBox(0,2,"Not Found")
                ExitLoop
            EndIf
        Next
    Else
        MsgBox(0,1,"Not Found")
    EndIf
EndFunc
Пример отказывается находить нужный цвет.
Примечания:
Больше года не работал с AutoIt, до этого работал на уровне новичка. Сейчас, разумеется, когда понадобилось что-то сделать, понял, что не помню практически ничего. В созданной в соседнем топике теме меня направили к темам по PixelSearchEx и ImageSearch.au3, которые я самостоятельно читал, но понял только то, что одному мне это не осилить.
Прошу помощи у вас.
 
Автор
F

Frost_Imp

looooseeeer
Сообщения
17
Репутация
0
Кусок скриншота верхней правой части окна, в которой нужно "найти" кнопку "Закрыть" (красная с белым крестиком)
adff62aa4c3b47b581da917.png
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Эээ, братан, ну ты и накрутил...
В твоём скрипте ты находишь самую верхнюю левую белую точку, от неё по диагонали вправо вниз ищешь красную точку цвета 0xAB2F22 (а в белом крестике, сам понимаешь, в этом месте будет белая точка), а если с первого раза не нашел то сразу выходишь из цикла поиска.
Ты давай без циклов попробуй - 4 точки немного ведь, можно и руками код выписать. Найди первую точку. От неё найди втору (не в цикле, а просто сам руками напиши), потом третью, потом четвёртую.
Плохой, конечно, код получится, не оптимальный, но так меньше шансов ошибиться.
 
Автор
F

Frost_Imp

looooseeeer
Сообщения
17
Репутация
0
К сожалению, я не могу перевести мысль в код. Начиная с "самую верхнюю левую белую" - как начать искать именно слева? и сверху
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ты и ищешь именно слева и сверху.
PixelSearch сначала берёт самую верхнюю строку и проверяет в ней пиксели слева направо, потом вторую строку, потом третью...
http://autoit-script.ru/autoit3_docs/functions/PixelSearch.htm

Как бы раздел "Стол заказов".
Если ты хочешь чтобы тебе дали готовый код, то твоей информации мало. Нужны полные скриншоты и точное описание того что ты хочешь сделать.
А если хочешь чтобы тебе помогли разобраться почему не работает твой скрипт, то создай тему в другом разделе (только подумай как назвать тему ;D)
 
Автор
F

Frost_Imp

looooseeeer
Сообщения
17
Репутация
0
Позволь спросить относительно справки. Там написано:
Направление поиска изменяется в зависимости от того, как указаны границы прямоугольника:
Слева направо - left < right
Справа налево - right < left
Тут я призадумался - а как указать, что первый параметр - это не left, а right?
PixelSearch ( left, top, right, bottom, color [, shade-variation [, step [, hwnd]]] )
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
сверху вниз, слева направо
Код:
PixelSearch( 0, 0, 100, 300, 0xFF0000 )


сверху вниз, справа налево
Код:
PixelSearch( 100, 0, 0, 300, 0xFF0000 )
 
Автор
F

Frost_Imp

looooseeeer
Сообщения
17
Репутация
0
Вот и в чем проблема... Скриншот приведен выше, код
Код:
Opt("MouseCoordMode",2) 
opt("PixelCoordMode",2) 
global $pos1,
$coord = PixelSearch( 300, 0, 0, 300, 0xFFFFF2 )
If Not @error Then
    MsgBox(0, "X and Y are:", $coord[0] & "," & $coord[1])
EndIf

ничего не возвращает. Хотя
189c6050c41c4051b1c2bd3.png

цвет такой есть. В чем может быть проблема?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
1. Position 1404, 90 ну никак не попадает в область 0,0,300,300
2. Брал бы ты не точное совпадение, а с запасом
Код:
$coord = PixelSearch( 300, 0, 0, 300, 0xFFFFF2, 10 )

3. В этой областит точка такого цвета не единственная. И PixelSearch найдёт первую подходящую, а не именно эту, которую ты указал на скриншоте.
 

teges

Знающий
Сообщения
18
Репутация
16
ИМХО ->
Код:
( 300, 0, 0, 300, 0xFFFFF2 )
это от 300 к 0 по горизонтали, сие левый верхний угол
вот если бы
Код:
(@DesktopWidth, 0, 0, 300, 0xFFFFF2 )

Ну а после можно проверить соседний пиксель ;)
 
Верх