Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: zmrvyuls on January 15, 2021, 09:40:38 PM
-
Помогите, пожалуйста. Нужно чтобы когда конкретный пиксель принял определенный цвет - сделать клик, если нет - проверить еще раз через 2 секунды. С шаблоном IF_PIXEL_IN все работает отлично, а вот с альтернативной командной A_IFPIXELIN просто перманентно кликает. Хочу сделать с привязкой к окну.
$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
#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
-
В первую очередь нужно проверить стандартную привязку, если с ней проблемы, то тогда уже пробовать различные варианты. Если использование библиотеки "alt_winmode.cms" кажется сложнsv, либо она также не хочет работать, то можно воспользоваться виртуальной машиной.
Правильно так:
#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), которая запишет в лог нужные нам координаты и цвет пикселя под курсором."
-
В первую очередь нужно проверить стандартную привязку, если с ней проблемы, то тогда уже пробовать различные варианты. Если использование библиотеки "alt_winmode.cms" кажется сложнsv, либо она также не хочет работать, то можно воспользоваться виртуальной машиной.
"Не забываем, что все координаты вводить относительно верхнего левого угла окна.
Горячие клавиши alt+q в данном случае не помогут. Поможет команда A_CHECK_PXL(hwnd), которая запишет в лог нужные нам координаты и цвет пикселя под курсором."
Спасибо большое. Наконец-то понял логику этих команд.
A_PXL выводит цвет в $A_return1. Сравнил с нужным цветом и все заработало
#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
Со стандартной привязкой не работает, белое окно. Виртуальная машина тоже не вариант.
-
LDOWN (80,810) и LUP (80,810) это программное нажатие в активное окно. Чтобы клик сработал в неактивном окне, и курсор был свободен, нужно отправить окну системные сообщения, они в библиотеке "alt_winmode.cms" в подпрограммах A_LDOWN и A_LUP.
-
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.