Author Topic: Ожидание цвета пикселя  (Read 2496 times)

0 Members and 1 Guest are viewing this topic.

zmrvyuls

  • Guest
Ожидание цвета пикселя
« on: January 15, 2021, 09:40:38 PM »
Помогите, пожалуйста. Нужно чтобы когда конкретный пиксель принял определенный цвет - сделать клик, если нет - проверить еще раз через 2 секунды. С шаблоном IF_PIXEL_IN все работает отлично, а вот с альтернативной командной A_IFPIXELIN просто перманентно кликает. Хочу сделать с привязкой к окну.
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN(400, 80, 400, 80, 4722204)
      $check = 1
   LDOWN(80,810)
   WAITMS(RND(80,120))
   LUP(80,810)
   ELSE
      WAIT(2)
   END_IF
END_CYC

HALT
Code: (clickermann) [Select]
#include "alt_winmode.cms"
WAIT(2)
$check = 0
WHILE($check = 0)
   A_GETSCREEN(0, 0, 1000, 500, 262962)
   A_IFPIXELIN(400, 80, 400, 80, 4722204, 262962)
   IF
    $check = 1
   LDOWN(80,810)
   WAITMS(RND(80,120))
   LUP(80,810)
   ELSE
      WAIT(2)
   END_IF
END_CYC

HALT

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Ожидание цвета пикселя
« Reply #1 on: January 16, 2021, 10:58:00 PM »
В первую очередь нужно проверить стандартную привязку, если с ней проблемы, то тогда уже пробовать различные варианты. Если использование библиотеки "alt_winmode.cms" кажется сложнsv, либо она также не хочет работать, то можно воспользоваться виртуальной машиной.

Правильно так:
Code: (clickermann) [Select]
#include "alt_winmode.cms"
WAIT(2)
$hwnd = 262962
$check = 0
WHILE($check = 0)
//в данном примере нужно не забывать, что координаты беруться относительно верхнего левого угла окна
   A_GETSCREEN(0, 0, 1000, 500, $hwnd)
   A_IFPIXELIN(400, 80, 400, 80, 4722204, $hwnd) //если нужно проверить один пиксель, а не область, то правильнее проверить его с помощью функции A_PXL(x, y, hwnd) 
   IF($A_return1>0)
      A_LDOWN (80,810, $hwnd)
      WAITMS(RND(80,120))
      A_LUP (80,810, $hwnd)
      $check = 1
   ELSE
      WAIT(2)
   END_IF
END_CYC

HALT

"Не забываем, что все координаты вводить относительно верхнего левого угла окна.
Горячие клавиши alt+q в данном случае не помогут. Поможет команда A_CHECK_PXL(hwnd), которая запишет в лог нужные нам координаты и цвет пикселя под курсором."

zmrvyuls

  • Guest
Re: Ожидание цвета пикселя
« Reply #2 on: January 17, 2021, 12:24:20 AM »
В первую очередь нужно проверить стандартную привязку, если с ней проблемы, то тогда уже пробовать различные варианты. Если использование библиотеки "alt_winmode.cms" кажется сложнsv, либо она также не хочет работать, то можно воспользоваться виртуальной машиной.

"Не забываем, что все координаты вводить относительно верхнего левого угла окна.
Горячие клавиши alt+q в данном случае не помогут. Поможет команда A_CHECK_PXL(hwnd), которая запишет в лог нужные нам координаты и цвет пикселя под курсором."
Спасибо большое. Наконец-то понял логику этих команд.
A_PXL выводит цвет в $A_return1. Сравнил с нужным цветом и все заработало
Code: (clickermann) [Select]
#include "alt_winmode.cms"
WAIT(2)
$hwnd = 328254
$check = 0
WHILE($check = 0)
   A_GETSCREEN(0, 0, 1000, 500, $hwnd)
   A_PXL(400, 100, $hwnd)
//   A_IFPIXELIN(400, 80, 400, 80, 4722204, $hwnd) 
   IF($A_return1=4722204)
      LDOWN (80,810)
      WAITMS(RND(80,120))
      LUP (80,810)
      $check = 1
   ELSE
      WAIT(2)
   END_IF
END_CYC
 
HALT
Со стандартной привязкой не работает, белое окно. Виртуальная машина тоже не вариант.



dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Ожидание цвета пикселя
« Reply #3 on: January 17, 2021, 12:51:09 AM »
LDOWN (80,810) и LUP (80,810) это программное нажатие в активное окно. Чтобы клик сработал в неактивном окне, и курсор был свободен, нужно отправить окну системные сообщения, они в библиотеке "alt_winmode.cms" в подпрограммах A_LDOWN и A_LUP.

zmrvyuls

  • Guest
Re: Ожидание цвета пикселя
« Reply #4 on: January 17, 2021, 01:16:26 AM »
LDOWN (80,810) и LUP (80,810) это программное нажатие в активное окно. Чтобы клик сработал в неактивном окне, и курсор был свободен, нужно отправить окну системные сообщения, они в библиотеке "alt_winmode.cms" в подпрограммах A_LDOWN и A_LUP.
Я понял. Просто приложение не реагирует на нажатия клавиш кроме влево, вправо, вверх и вниз (из тех что я проверил), а с альтернативной командой A_KEYPRESS даже на них. Поэтому использую клики по экранной клавиатуре. Еще работает вариант переназначить в ATNSOFT Key Manager (он может работать с окном) редко используемую клавишу или комбинацию клавиш на условную V.

Upd. Причем если просто переназначить F6 на V и потом нажимать F6 в Clickermann то работать не будет. F6 при переназначении необходимо ввести командой из Clickermann.
« Last Edit: January 17, 2021, 01:28:08 AM by zmrvyuls »