Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 2.07 Отправка сообщений мыши в неактивные и свернутые окна. Работа мыши в фоновом режиме

Страниц (12): [1] 2 3 4 5 6 7 8 9 ... » В конец
 

1. Kibor - 17 Августа, 2013 - 16:27:46 - перейти к сообщению
Добавлена возможность программировать клики и перетаскивания мыши в свернутом и неактивном окне.

sendmouse - Делает клик в клиентских координатах окна КОНТРОЛА на который указывает указатель.

Синтаксиc:
CODE:
sendmouse (LEFT, 200, 250, wind);

Третий и четвертый параметры указывают на клиентские координаты КОНТРОЛА на который указывает указатель wind.

Как получить указатель на контрол:
Пример получения указателя на клиентскую часть окна ПАИНТ.
Наводим мышь на поле для рисования, жмем CTRL+SHIFT+S. В верхней части шпиона находится указатель на окно программы ПАИНТ. Необходимый нам указатель на контрол в котором непосредственно происходит рисование находится в нижней части.
Для всех функций начинающихся на send надо получать указатели не на главное окно, а на контрол (если он есть появляется при нажатие CTRL+SHIFT+S). То же самое касается sendkey, sendkeydown и sendkeyup.

=================================================

sendmousedown (LEFT, 200, 250, wind) - нажимает левую кнопку мыши. RIGHT правую, MIDDLE среднюю.
sendmouseup (LEFT, 200, 250, wind) - отпускает левую кнопку мыши. RIGHT правую, MIDDLE среднюю.
sendmousedbl (LEFT, 200, 250, wind) - двойной клик левой кнопкой мыши. RIGHT правой, MIDDLE средней.

sendmousemove (200, 250, wind) - перемещение мыши в указанные клиентские координаты окна.

sendmousetransfer(LEFT, 200, 250, 300, 350, 0.02, wind) - перетаскивание с зажатой левой кнопкой, RIGHT правой, MIDDLE средней, -1 не нажатые.

=================================================

Пример рисования в свернутом окне паита:
CODE:
win w=window (-1, "Afx:00000000FFB90000:8", window ("Безымянный - Paint", "MSPaintApp", -1));//Получить указатель на поле для рисования в Паинт
sendmousetransfer(LEFT, 200, 200, 250, 250, 0.02, w);//Провести линию с зажатой левой кнопкой мыши с клиентских координат 200, 200 в 250, 250.


=================================================

А вот к примеру в браузере Мозила один указатель на главное окно и достаточно получить указатель на главное окно в верхней части шпиона. Координаты по которым будут идти клики можно узнать наведя мышь на нужную ссылку и нажав CTRL+SHIFT+S. Координаты для клика берем в поле Мышь в клиентской части окна.
2. ArtChemist - 17 Августа, 2013 - 22:49:03 - перейти к сообщению
Боюсь у меня ваш скрипт для паинта не сработал Огорчение и в игру тоже не получается посылать клики, а вот в браузере все работает замечательно.
P. S.
В игре при нажатии CTR+SHIFT+S ни каких контролов не появляется только окно( хотя в браузере было так же, но работает).
(Добавление)
Так, с паинтом разобрался все работает, а вот игру оживить ни как не получается(

вот например кусочек кода, должен кликать по иконке персонажа:
CODE:
win w=window (-1, -1, window ("Illodemiur", "SunAwtFrame", -1));
sendmouse(LEFT, 27, 118, w);

координаты клика клиентские. Проверял в других окнах и играх все работает, именно в это окно отказывается посылать нажатия мыши и клавиш.
3. Kibor - 18 Августа, 2013 - 01:04:51 - перейти к сообщению
 ArtChemist пишет:
Боюсь у меня ваш скрипт для паинта не сработал

Хм
Конечно не сработал для вашего паинта...
Исходя из куска вашего кода для кикермана
 Kibor пишет:
WNDPOS(WNDFIND ("Paint"Подмигивание,10,10)
и моего
 Kibor пишет:
window ("Безымянный - Paint", "MSPaintApp", -1));
надо указать свой указатель.
Указатель (хендл) вещь индивидуальная и зависит от операцинки. В кликермане он получается непосредственно самим пользователем с помощью альт ц один раз и не может быть изменен в процессе работы скрипта, то есть возможна работа только с одним окном и все, а в киборе он указывается в скрипте и можно их указать для каждого окна отдельно.



 ArtChemist пишет:
в игру тоже не получается посылать клики

А никто не говорил что такая эмуляция будет работать везде. Тут как программист игры захочет. Это касается не только Кибор но и других программ, того ж самого кликермана, использующего такую эмуляцию. Механизм у них один и другого нет. Хм ...
4. ArtChemist - 18 Августа, 2013 - 01:24:27 - перейти к сообщению
Хм, не хочу вас огорчать но кликерман с этой игрой работает в режиме привязки. Игра вообще для мобильных устройств, врят ли там есть какая либо защита.
5. Kibor - 18 Августа, 2013 - 01:26:55 - перейти к сообщению
Что за игра?
6. ArtChemist - 18 Августа, 2013 - 01:28:03 - перейти к сообщению
Illodemiur
7. Kibor - 18 Августа, 2013 - 01:29:08 - перейти к сообщению
Я уже понял, по указателю. Просто сразу не посмотрел. Сейчас посмотрю.
8. Kibor - 18 Августа, 2013 - 04:55:39 - перейти к сообщению
 ArtChemist пишет:
вот например кусочек кода, должен кликать по иконке персонажа:
CODE:
win w=window (-1, -1, window ("Illodemiur", "SunAwtFrame", -1));
sendmouse(LEFT, 27, 118, w);


В этой игре мышь воспринимается в координатах начиная с левого верхнего угла ЭКРАНА.
Это даже можно проверить в том же кликмане.
Если сначала привязать окно, а потом написать скрипт клика по любой кнопке игры в КЛИЕНТСКИХ координатах, которые предлагает кликман, то скрипт будет работать только если игра на весь экран и кнопка большая, что компенсирует смещение на рамку окна, так как клиентские и оконные почти совпадают. Если сдвинуть то не будет работать. У вас кликман работал потому что вы писали скрипт в экранных координатах, а потом привязывали окно. Попробуйте сдвинуть его и запустить скрипт опять... Или попробуйте отправить в кликмане клик в свернутое окно, даже если в развернутом он кликал в окне на заднем плане.

Это особенность этой игры. В Кибор вы сразу писали в клиентских исходя из данных в шпионе, поэтому просто не попадал клик по координатам.

Ниже приведу примеры как надо программировать мышь в этой игре. Работает в свернутом тоже.

Для работоспособности скрипта в Кибор при любом сдвиге окна можно поступить так:

Пример поиска и клика по картинке в игре:
Способ первый:
CODE:
win w=window ("Illodemiur", "SunAwtFrame", -1);
int col, x, y;
getdisplay(col, x, y);
findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, x, y, -1);//Поиск ведется по всему экрану. Координаты получаются экранные
sendmouse(LEFT, PosX_0[0], PosY_0[0], w);//клик в экранных координатах

Способ второй:
CODE:
win w=window ("Illodemiur", "SunAwtFrame", -1);
int col, x, y;
getdisplay(col, x, y);
findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, x, y, w);//Поиск ведется в оконном режиме в окне игры. Координаты получаются клиентские
sendmouse(LEFT, PosX_0[0]+w.leftclient, PosY_0[0]+w.topclient, w);//клик в клиентских координатах со сдвигом на позицию клиентской части окна относительно экрана. В итоге получаем экранные координаты.

Пример клика по клиентским координатам которые получили в шпионе. Не зависит того свернуто оно или сдвинуто. Ну естественно что окно не должно сдвигаться после получения указателя на игру:
CODE:
win w=window ("Illodemiur", "SunAwtFrame", -1);
sendmouse(LEFT, 1196+w.leftclient, 436+w.topclient, w);//клик в клиентских координатах полученных в шпионе со сдвигом на позицию клиентской части окна относительно экрана. В итоге получаем экранные координаты.

Будьте внимательны к координатам и указателям.
9. ArtChemist - 18 Августа, 2013 - 05:04:45 - перейти к сообщению
Благодарю за помощь, буду разбираться) а насче кликермена все верно я сперва писал скрипт а потом делал привязку и запускал его, иначе действительно клики смещались.
10. Kibor - 18 Августа, 2013 - 05:20:26 - перейти к сообщению
Описка во втором способе..
 Цитата:
win w=window ("Illodemiur", "SunAwtFrame", -1);
int col, x, y;
getdisplay(col, x, y);
findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, x, y, w);//Поиск ведется в оконном режиме в окне игры. Координаты получаются клиентские
sendmouse(LEFT, PosX_0[0]+w.leftclient, PosY_0[0]+w.topclient, w);//клик в клиентских координатах со сдвигом на позицию клиентской части окна относительно экрана. В итоге получаем экранные координаты.

Надо указать указатель w а не -1... поправил..

Powered by ExBB FM 1.0 Final