Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » В очередной раз проблема с sendmouse

Страниц (2): « 1 [2]
 

11. AaronSelenger - 29 Марта, 2017 - 07:29:14 - перейти к сообщению
 Kibor пишет:
не кликает во второй всегда запущенной программе?
так возможно что получает указатель только первой запущенной.
win w = window (-1, "WebViewHost", -1);
if (w==0)messagebox("нет указателя"Подмигивание;

Я уже даже удалял первую программу с компьютера, но во второй по прежнему не происходит клик
12. idcco - 29 Марта, 2017 - 14:10:25 - перейти к сообщению
По теме (первому сообщению). Весь вопрос в том, на что указываете. Если вы про браузер, то опять же нужно корректно поставить указатель. Разные браузеры их отображают по-разному, как и разные аналогичные друг другу программы. Я эту кроссбраузерность (и не только) или обход неверного определения контрола, решил сделать следующим способом:
CODE:
//w - окно с браузером. dispname и browserwidget содержат значения для определения окна. Важно что ориентир делаю на окно а не на контрол.
w = window (dispname, browserwidget, -1);
//wp[30][30] - Скрин рабочей области (контрола) левый верхний угол ВЕРНОГО рабочего поля (контрола) 30 х 30. Файл wp.bmp, заранее сохраненный.
int wp[30][30];
// Заранее подготовил функцию getpath () которая возвращает полный путь к директории с ботом. Важно чтоб был полный путь, так как есть вложенная папка Img.
string path_wp = getpath () + "Img\wp.bmp";
loadimage (#wp[0][0], path_wp);
int wpX[1]; int wpY[1];
//ищу в окне левый верхний угол контрола по изображению wp.bmp
findimage (1, #wp[0][0], 0, #wpX[0], #wpY[0],
w.left, w.top, w.width, w.height, 30, 30, 30, 30, 30, 30, 90, 1, w);
sleep (100);
x = wpX[0];
y = wpY[0];

Теперь у нас есть верные координаты контрола относительно окна. И если мы будем их плюсовать к координатам всех дочерних элементов окна, то нам совершенно пофиг, где и как расположен контрол чем он дышит, как определается и т.д... в разных браузерах и программах. Иными словами работаем с переменными w.left, w.top, w.width, w.height и к каждой координате просто плюсуем соответственно x и y. В Вашем случае код получится такой:
CODE:
if(findimage(1, #i_rise[0][0], 0, #px[0], #py[0], 0, 0, w.width, w.height, w)==1)
{
sendmouse(LEFT, px[0]+x, py[0]+y, w);
sleep(rand(2000, 4000));
check_page_reset = 0;
}

Это или поможет, или я не понял суть проблемы.
(Добавление)
И вот еще. Рекомендую определять картинку с учетом погрешностей и кликать не на левый верхний угол картинки, а на ее центр. Попробуйте так:
CODE:
if(findimage(1, #i_rise[0][0], 0, #px[0], #py[0],
0, 0, w.widthclient, w.heightclient, 30, 30, 30, 30, 30, 30, 90, 1, w)==1)
{
sendmouse(LEFT, px[0]+imagewidth(#i_rise[0][0])/2, py[0]+imageheight(#i_rise[0][0])/2, w);
sleep(rand(2000, 4000));
check_page_reset = 0;
}

или если воспользуетесь моим способом, то код получится такой:
CODE:
if(findimage(1, #i_rise[0][0], 0, #px[0], #py[0],
0, 0, w.width, w.height, 30, 30, 30, 30, 30, 30, 90, 1, w)==1)
{
sendmouse(LEFT, px[0]+x+imagewidth(#i_rise[0][0])/2, py[0]+y+imageheight(#i_rise[0][0])/2, w);
sleep(rand(2000, 4000));
check_page_reset = 0;
}

(Добавление)
Посмотрел видео. Предполагаю, что во второй программе есть контрол, который вписан в другой контрол, который определяется как наш.
Короче способ который я описал выше (с привязкой к окну и определением рабочей области) должен помочь.
13. AaronSelenger - 30 Марта, 2017 - 02:19:33 - перейти к сообщению
Спасибо большое))))
(Добавление)
Вот же загвоздка.
CODE:
mousemove(px[0], py[0], w);

Работает правильно. Мишь переводит на правильные координаты, туда куда нужно.
sendmouse даже вашим методом не работает. Клик происходит в левый угол экрана...
(Добавление)
Короче, если отталкиваться от координат клиента (программы), то mouse работает и кликает

Powered by ExBB FM 1.0 Final