1

Тема: AHK: PixelSearch и приоритеты.

Прошу помощи -  данный скрипт нажимает определенную кнопку, в зависимости от цвета который светится на экране. Все работает как надо, но если есть 2 координаты и в них находятся указанные цвета он начинает нажимать - 232323232323 (пример из скрипта). А хотелось бы выставить приоритет если допустим - по координатам p2 := [959, 974, 960, 975, 0x67FF18] он нажимал кнопку, а про координату и цвет p3 := [921, 972, 922, 973, 0x36F4FF] забывал пока не пропадет  p2 := [959, 974, 960, 975, 0x67FF18]. Есть ли такая возможность?
Если не понятно попробую перефразировать иначе.
Простите за кривое обьяснение  не знал как выразить иначе


p1 := [959, 974, 960, 975, 0x2600FF]
p2 := [959, 974, 960, 975, 0x67FF18]
p3 := [921, 972, 922, 973, 0x36F4FF]
p4 := [921, 972, 922, 973, 0xFF5005]
p5 := [959, 974, 960, 975, 0xE892FF]
p6 := [959, 974, 960, 975, 0xE1FF00]
p7 := [959, 974, 960, 975, 0xFFFFF1]
p8 := [959, 974, 960, 975, 0xFFFFF1]
pause
loop
{
   WinWaitActive, 
   loop 8
   {
      PixelSearch, Px, Py, p%A_Index%[1], p%A_Index%[2], p%A_Index%[3] , p%A_Index%[4], p%A_Index%[5], 3, Fast
      if !errorlevel
         send % A_Index            
   }
}
F12::pause
$vk45::
   sleep 200
   send {vk45}
return

2

Re: AHK: PixelSearch и приоритеты.

У Вас есть 8 прямоугольных областей экрана, внутри каждой из которых скрипт ищет пиксель определённого цвета. Требуется выполнить условие: производить поиск в каждой последующей области только после того, как будет успешно завершён поиск в предыдущей.
Я телепат?

3

Re: AHK: PixelSearch и приоритеты.

0.о да ты телепат но не обязательно что бы поиск заканчивался успешно.
Просто необходимо некая последовательность - пиксель в области и с цветом p1 := [959, 974, 960, 975, 0x2600FF] приоритетнее чем p3 := [921, 972, 922, 973, 0x36F4FF] и необходимо нажимать кнопку 1 пока он не пропадет, и только потом начать нажимать кнопку 3 которой сооветствует p3 := [921, 972, 922, 973, 0x36F4FF]. вот как то так

4

Re: AHK: PixelSearch и приоритеты.

Непонятно. Сперва упоминаете р2 и р3, теперь р1 и р3. Так дело не пойдёт. Даже самые опытные телепаты не возьмутся угадывать ход мыслей пользователя путающего показания

5 (изменено: bubaaa, 2012-10-14 14:37:37)

Re: AHK: PixelSearch и приоритеты.

Вообщем есть 2 пикселя неважно каких - допустим p1 := [959, 974, 960, 975, 0x2600FF] и p2 := [959, 974, 960, 975, 0x67FF18].
Каждому пикселю принадлежит кнопка p1 := [959, 974, 960, 975, 0x2600FF]  = 1 ( еденица ) - если на экрает этот пиксель  жмет 1
                                                             p2 := [921, 972, 922, 973, 0x67FF18] = 2 (двойка)  - если на экрает этот пиксель  жмет 2
Если на эране существуют 2 пикселя p1 := [959, 974, 960, 975, 0x2600FF]  и p2 := [921, 972, 922, 973, 0x67FF18] скрипт нажимает 12121212.
А нужно если существует 2 пикселя он нажимал только 1, как только как только p1 := [959, 974, 960, 975, 0x2600FF]  пропадает начинает нажимать 2 p2 := [921, 972, 922, 973, 0x67FF18]

Если появился опять p1 := [959, 974, 960, 975, 0x2600FF] то начинает нажимать 1

6

Re: AHK: PixelSearch и приоритеты.

Непонятно. В примере указаны 8 регионов поиска, вы ведёте речь о двух. Зачем указаны остальные 6 регионов? Почему речь идёт лишь о двух?

7 (изменено: bubaaa, 2012-10-14 15:14:35)

Re: AHK: PixelSearch и приоритеты.

Я просто пример приводил. Извините что запутал.
На экране есть 8 пикселей  с разными цветами и координатами.

p1 := [951, 974, 960, 975, 0x2600FF]
p2 := [952, 974, 960, 975, 0x67FF18]
p3 := [922, 972, 922, 973, 0x36F4FF]
p4 := [923, 972, 922, 973, 0xFF5005]
p5 := [953, 974, 960, 975, 0xE892FF]
p6 := [954, 974, 960, 975, 0xE1FF00]
p7 := [955, 974, 960, 975, 0xFFFFF1]
p8 := [956, 974, 960, 975, 0xFFFFF2]

мой скрипт нажимает 12345678.

Если на экранет существует только 3 пикселя такие как

p3 := [922, 972, 922, 973, 0x36F4FF]
p4 := [923, 972, 922, 973, 0xFF5005]
p5 := [953, 974, 960, 975, 0xE892FF]

то скрипт нажимает 345

-----------------------------------------------------------------------------------

А хочется что бы получилось

p1 := [951, 974, 960, 975, 0x2600FF] - самый приоритетный пиксел если он существует на экране  - нажимается - 1 ( и только 1 ) пока пиксель не пропадет. ( вне зависимости есть или нет остальных пикселей )
p2 := [952, 974, 960, 975, 0x67FF18] - второй по степени приоритета - если нет 1-ого пикселя и существует p2 := [952, 974, 960, 975, 0x67FF18] нажимается 2  ( и только 2 ) ( вне зависимости есть или нет остальных пикселей )
p3 := [922, 972, 922, 973, 0x36F4FF] - 3ий по степени приоритета - если нет 1 и 2 пикселя и существует  p3 := [922, 972, 922, 973, 0x36F4FF] нажимается 3( и только 3 )  ( вне зависимости есть или нет остальных пикселей )
и так далее до 8
Интересно получилось донести? =/

8 (изменено: creature.ws, 2012-10-14 15:24:08)

Re: AHK: PixelSearch и приоритеты.

Нет, не получилось.

Rects := [{x0: 959, y0: 974, x1: 960, y1: 975, color: 0x2600FF, button: 1, priority: 8}
        , {x0: 959, y0: 974, x1: 960, y1: 975, color: 0x67FF18, button: 2, priority: 1}
        , {x0: 921, y0: 972, x1: 922, y1: 973, color: 0x36F4FF, button: 3, priority: 0}
        , {x0: 921, y0: 972, x1: 922, y1: 973, color: 0xFF5005, button: 4, priority: 0}
        , {x0: 959, y0: 974, x1: 960, y1: 975, color: 0xE892FF, button: 5, priority: 0}
        , {x0: 959, y0: 974, x1: 960, y1: 975, color: 0xE1FF00, button: 6, priority: 0}
        , {x0: 959, y0: 974, x1: 960, y1: 975, color: 0xFFFFF1, button: 7, priority: 0}
        , {x0: 959, y0: 974, x1: 960, y1: 975, color: 0xFFFFF1, button: 8, priority: 0}]

f12::SetTimer, SearchInRegions, % (enabled := !enabled)? 300:"Off"

SearchInRegions:
    SendInput % GetButtonName()
    return

GetButtonName()
{
    global Rects

    for rectIndex, Rect in Rects {
        PixelSearch, x, y, % Rect.x0, % Rect.y0, % Rect.x1, % Rect.y1, % Rect.color, 3, Fast
        if (!ErrorLevel && Rect.priority > maxPriority)
            result := rectIndex, maxPriority := Rect.priority
    }

    return result? Rects[result].button : ""
}

9

Re: AHK: PixelSearch и приоритеты.

К чему такие сложности? Насколько я понял из сего потока сознания (решающим стал пост #7), ТС желает, чтобы при первом совпадении нижеследующие по списку точки просто не проверялись. Делов на один оператор :-)
Ну и пару фигурных скобок. Изменения в первоначальном скрипте из поста #1 минимальны

...
if !errorlevel
   {
         send % A_Index
         break			
   }
...

10

Re: AHK: PixelSearch и приоритеты.

Спасибо всем большое break помог.