1

Тема: AHK: реагирование на цвет

Здравствуйте, помогите пожалуйста со скриптом реагирующим на цвет в определенной области экрана. Мне оч нужен кликер который будет активировать в тот момент когда определенная точка экрана окрашивается в нужный цвет. К примеру будет щелкать мышкой с интервалом 30мс пока в области 512х384 пикселей (середина 1024х768) будет красный цвет.
Вопрос может показаться тупые тк я не разбираюсь в скриптовых языках, но постарался расписать всё предельно ясно и очень надеюсь на помощь, заранее благодарен.

2 (изменено: Grey, 2011-07-27 02:15:06)

Re: AHK: реагирование на цвет

ANIMka пишет:

...я не разбираюсь в скриптовых языках, но постарался расписать всё предельно ясно...

Это не оправдание, следует хотябы в ознакомительном порядке изучить документацию (en/ru). У меня при разрешении 1280х1024 этот скрипт к примеру переместил указатель мыши на букву "а" в слове "красный":

Loop
   {
      PixelSearch, x, y, 324, 302, 383, 325, 0x5900ff,, Fast
      If !ErrorLevel
         {
            MsgBox,,, % "Цвет найден ("x ", "y ")", 1
            MouseMove, x, y
            Exit
         }
      Else
         MsgBox,,, Цвет не обнаружен, 1
      Sleep, 750
      If GetKeyState("vk1b" "P") ; удерживать Esc для остановки цикла поиска
         Break
   }
ExitApp

По вопросу требуется, что-то типа такого:

Loop
   {
      PixelSearch, x, y,,, 512, 384, 0xFF0000,, Fast ; указать цвет к примеру красный - #FF0000
      If !ErrorLevel
         MouseClick, L, x, y
      Sleep, 30
      If GetKeyState("Esc" "P")
         Break
   }
ExitApp

3

Re: AHK: реагирование на цвет

Ну получается, или надо к цвету добавить какой то параметр ?

4

Re: AHK: реагирование на цвет

Если Win7, то следует перейти на тему с непрозрачными окантовками окон (к примеру у меня не работает в полноэкранном приложении поиск пикселя на W7), и потом, надо точно определить искомый цвет/координаты...

5

Re: AHK: реагирование на цвет

Сделайте скриншот искомого цвета в целевом приложении, м.б. это упростит задачу.

6 (изменено: ANIMka, 2011-07-25 13:22:52)

Re: AHK: реагирование на цвет

винда 7, не полноэкранное (оконный режим)
скрин http://piccy.info/view3/1774388/1c40786 … 9cee55c1e/

7 (изменено: Grey, 2011-07-27 01:15:36)

Re: AHK: реагирование на цвет

...
PixelSearch, x, y, 510, 382, 512, 384, 0xFF0000,, Fast RGB
...

Опять таки, этим кодом не удобно пользоваться, он же должен на какую-то клавишиву активироваться и отключаться за не надобностью, как-то так:

~LShift:: ; при удержании клавиши левого шифта будет производиться поиск
   While GetKeyState("LShift" "P")
      {
         PixelSearch, x, y, 510, 382, 512, 384, 0xFF0000,, Fast RGB
         If !ErrorLevel
            MouseClick, L, x, y
         Sleep, 30
      }
   Return

8 (изменено: ANIMka, 2011-07-25 11:21:00)

Re: AHK: реагирование на цвет

Так же ноль реакции на цвет.
Попробовал убрать из цвета 0x,  тогда стал переводить мышку на заголовки приложений. 0_о

9

Re: AHK: реагирование на цвет

ANIMka пишет:

Так же ноль реакции на цвет.
Попробовал убрать из цвета 0x,  тогда стал переводить мышку на заголовки приложений. 0_о

Скрин с той самой точкой можешь выложить

10 (изменено: ANIMka, 2011-07-25 13:22:28)

Re: AHK: реагирование на цвет

Invalid пишет:

Скрин с той самой точкой можешь выложить

Скрин

11

Re: AHK: реагирование на цвет

ANIMka, ссылки оформляются тэгом «url».

12 (изменено: ANIMka, 2011-07-25 13:23:14)

Re: AHK: реагирование на цвет

alexii пишет:

ANIMka, ссылки оформляются тэгом «url».

Извиняюсь. Исправил.

13 (изменено: Grey, 2011-07-27 15:02:14)

Re: AHK: реагирование на цвет

...
PixelSearch, x, y, 510, 382, 512, 384, 0xFF0000,, Fast RGB
...

С параметром RGB находит красный цвет. Вот ещё пример:

SetFormat, Float, 0.2
Colors := "зелёный,жёлтый,серый,красный,синий,малиновый"

Enter::
   StartSearch := A_TickCount
   Loop, Parse, Colors, `,
      {
         MouseMove, 680, 202
         ToolTip, % "цвет "A_LoopField
         Sleep, 500
         If A_LoopField = зелёный
            PixelSearch, x, y, 663, 181, 693, 197, 0x00FF00,, Fast
         If A_LoopField = жёлтый
            PixelSearch, x, y, 663, 181, 693, 197, 0x32CDF4,, Fast
         If A_LoopField = серый
            PixelSearch, x, y, 663, 181, 693, 197, 0x7D7D7D,, Fast
         If A_LoopField = красный
            PixelSearch, x, y, 663, 181, 693, 197, 0xFF0000,, Fast RGB
         If A_LoopField = синий
            PixelSearch, x, y, 663, 181, 693, 197, 0x0000FF,, Fast RGB
         If A_LoopField = малиновый
            PixelSearch, x, y, 663, 181, 693, 197, 0xFF00FF,, Fast
         If !ErrorLevel
            {
               MouseMove, x, y
               PixelGetColor, ColorCode, x, y, RGB
               ColorCode := SubStr(ColorCode, 3)
               ToolTip, % A_LoopField " найден`nx: "x " y: "y
                                   . "`n#"ColorCode
               ColorCount++
            }
         Else
            ToolTip, % A_LoopField " не найден"
         Sleep, 1000
      }
   StopSearch := A_TickCount - StartSearch
   MouseMove, 680, 202
   If !ColorCount
      ToolTip, ни одного цвета не найдено
   Else
      ToolTip, % "найдено цветов: "ColorCount
             . "`nза "StopSearch / 1000 "сек."
   MsgBox,,, Конец поиска, 1
   MouseMove, 640, 512
   ToolTip
   ColorCount :=
   Return

Esc::ExitApp

пробовал на вот этом скрине. Если не задать RGB параметр поиску красного и синего цветов, то красный не будет найден, а синий укажет на красный.

14

Re: AHK: реагирование на цвет

У меня не поддерживает русские символы... Скрин
И...напомню что я нуб ) скажу что скрипт каким то большим стал нежели первоначальный 0_о

15 (изменено: Grey, 2011-07-27 01:10:48)

Re: AHK: реагирование на цвет

ANIMka пишет:

У меня не поддерживает русские символы...

Надо бновить АХК

ANIMka пишет:

...скажу что скрипт каким то большим стал нежели первоначальный 0_о

Это пример поиска цветов на картинке размером 1280х1024 с выводом на весь экран (fullscreen), если разрешение монитора не будет соответствовать разрешению самой картинки, цвета не найдутся. Ваш скрипт вот этот:

~LShift::
   While GetKeyState("LShift" "P")
      {
         PixelSearch, x, y, 510, 382, 512, 384, 0xFF0000,, Fast RGB
         If !ErrorLevel
            MouseClick, L, x, y
         Sleep, 30
      }
   Return

Опять таки, координаты 512 и 384 соответствуют центру разрешения 1024х768

ANIMka пишет:

...не полноэкранное (оконный режим)

Следует замерить (...\AutoHotkey\AU3_Spy.exe) координаты центра этого окна.

16 (изменено: ANIMka, 2011-07-26 12:40:39)

Re: AHK: реагирование на цвет

У меня сейчас 1600х900 тк купил новый моник, но это не столь важно тк скрипт я проверяю просто заливая весь экран красным цветом FF0000 и эффекта никакого. Координаты я замерю и установлю сам пусть даже как лох буду по пикселям мерить, но мне очень нужно что бы он реагировал на цвет. Не переводил на него мышку, а именно щелкал при появлении цвета в определенной точке.

AHT обновил, не один скрипт не пашет... .

17

Re: AHK: реагирование на цвет

ANIMka пишет:

...замерю и установлю сам пусть даже как лох буду по пикселям мерить, но мне очень нужно...

Замеры координат столь не пристойное дело?, удачи!

18 (изменено: ANIMka, 2011-07-26 13:16:32)

Re: AHK: реагирование на цвет

Grey пишет:

Замеры координат столь не пристойное дело?, удачи!

http://i.piccy.info/i5/56/06/1780656/Screenshot-36.jpg

19

Re: AHK: реагирование на цвет

1. В Direct3D (игра) даже если искомый цвет будет найден, то клик по координатам не будет таким, как хочется (курсор упрётся в пол/потолок).
2. Захват экрана надо сохранять в *.bmp, а лучше в *.tiff чтобы избежать лишней компрессии (искажение цветов).

20

Re: AHK: реагирование на цвет

Grey пишет:

1. В Direct3D (игра) даже если искомый цвет будет найден, то клик по координатам не будет таким, как хочется (курсор упрётся в пол/потолок).

Мне нужно что бы он просто производил клик, не меняя позиции мыши.

Grey пишет:

2. Захват экрана надо сохранять в *.bmp, а лучше в *.tiff чтобы избежать лишней компрессии (искажение цветов).

Cпс за совет.

21

Re: AHK: реагирование на цвет

~LShift:: ; левый шифт
   While GetKeyState("vkA0" "P")
      {
         PixelSearch,,, 0, 0, 512, 384, 0xFF0000,, Fast RGB ; 512, 384 для 1600х900 не подходят
         If !ErrorLevel
            Click ; простой клик левой клавиши мыши
         Sleep, 30
      }
   Return

Мой монитор не поддерживает разрешение более чем 1280х1024, с координатами сам справишься.

22

Re: AHK: реагирование на цвет

Grey пишет:
~LShift:: ; левый шифт
   While GetKeyState("vkA0" "P")
      {
         PixelSearch,,, 0, 0, 512, 384, 0xFF0000,, Fast RGB ; 512, 384 для 1600х900 не подходят
         If !ErrorLevel
            Click ; простой клик левой клавиши мыши
         Sleep, 30
      }
   Return

Мой монитор не поддерживает разрешение более чем 1280х1024, с координатами сам справишься.

Спасибо, вот этот пашет.

Но если не сложно можете подсказать как указать все оттенки красного, а не только четко его, оч слабая деформация с расстоянием идет, и возможно ли указать не только конкретное пересечение пикселей где будет проводится поиск, но и область. К примеру высота 500-510; ширина 600-610 и поиск идет в этом квадратике.

23

Re: AHK: реагирование на цвет

...
PixelSearch,,, 500, 450, 1100, 700, 0xFF0000, 15, Fast RGB ; область поиска 600х500 по отношению к центру экрана, 15 - уровень отклонения цвета
...

24

Re: AHK: реагирование на цвет

Где я там нули писал, я малость запутался, прошу меня извинить...

25

Re: AHK: реагирование на цвет

Ок. А этот скрипт сканит цвет именно в выделенном приложении или вообще на экране ?

26

Re: AHK: реагирование на цвет

ANIMka пишет:

...сканит цвет именно в выделенном приложении или вообще на экране ?

Вообще, чтобы работал только в конкретном приложении, нужно использовать директиву #IfWinActive.

27

Re: AHK: реагирование на цвет

Попробовал указать...вот ток сканирует либо криво либо сканирует область куда больше 2x2 .

...
PixelSearch,,, 450, 448, 800, 798, 0xFF0000, 15, Fast RGB
...

28

Re: AHK: реагирование на цвет

ANIMka пишет:

...высота 500-510; ширина 600-610 и поиск идет в этом квадратике

Сканирует область 600 на 500, если работает криво, то нужно уменьшить отклонение в цвете, или площадь сканирования (фотошоп в помощь).

ANIMka пишет:

...больше 2x2

Это, что?

29

Re: AHK: реагирование на цвет

ANIMka пишет:

...

...
PixelSearch,,, 450, 448, 800, 798, 0xFF0000, 15, Fast RGB
...

Это (координаты), что, середина экрана?

30

Re: AHK: реагирование на цвет

Ну если я правильно понял то так нужно указывать координаты высоты и ширины от и до... 500-510 (от 500 до 510 пикселя по высоте)

31

Re: AHK: реагирование на цвет

Да, я там опечатку дал (450, надо 200). Берём фотошоп, ищем гайдами в фотошопе середину, выставляем вертикальную/горизонтальную вспомогательные линии (guide line), они автоматом прилипают к серединному пикселю по вертикали/горизонтали. Выделяем инструментом выделения произвольную область, в контестном меню выбераем правку выделения (transfom selections), панель инфо на переднем плане, тянем/правим за хэндлы выделение, смотрим предварительный результат в инфо панели, по достижению нужного размера периметра, утверждаем/перемещаем выделение в центр, он сам туда прилипает если гайд линии заявлены на отображение. Добавляем ещё несколько гайд линий по краям выделения, готов периметр, ровный/вымереный, остаётся определить координаты верхнего левого угла и правого нижнего, которые отображаются в той же инфо панели (маркер цвета (color sample tool) замечательно подходит для закладок и также без проблем липнет к углам вспомогательных линий), готово. Там же определяем нужный цвет, или через Colorspy.