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

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

1. mattallen - 16 Августа, 2021 - 15:36:34 - перейти к сообщению
Всем здравствуйте!
В целевой программе не работают Sendmouse. Появилась идея в основном цикле искать в окнах копий программы нужное изображение, при нахождении изображения в одном из них делать окно активным, отработать через mouse и вернуться в основной цикл поиска по окнам.
Подскажите, пожалуйста,
- как правильно делать окно активным?
- кибор знает координаты найденного изображения в окне, как правильно рассчитать экранные координаты для mouse?
Друзья, заранее спасибо! =)
2. Zireael - 16 Августа, 2021 - 18:02:51 - перейти к сообщению
CODE:
#define NULL 0
external(INT, "MapWindowPoints", "MapWindowPoints", "User32.dll");

int x = 200, y = 100; // допустим это координаты картинки

win w = window (-1, "Notepad", -1); // окно блокнота
if(w) // если окно найдено
{
int Points[2];
Points[0] = x; Points[1] = y;
MapWindowPoints(formatwi(w), NULL, address(#Points[0]), 1); // пересчитать координаты в экранные

activate(w); // активировать окно
pause(1000);
mousemove(Points[0], Points[1]); // навести курсор
}
else messagebox("Окно не найдено");
3. mattallen - 17 Августа, 2021 - 09:04:56 - перейти к сообщению
 Zireael пишет:
CODE:
#define NULL 0
external(INT, "MapWindowPoints", "MapWindowPoints", "User32.dll");


Всё заработало. Огромное спасибо! Закатив глазки
4. mattallen - 19 Августа, 2021 - 06:32:08 - перейти к сообщению
 Zireael пишет:
CODE:
#define NULL 0;

Возникла проблема.
Если выполнение скрипта остановить и запустить снова, левый верхний угол окна (координаты 0,0) начинает отсчитываться от координат, где был клик мышкой по форме для ввода текста в этом окне.
Перезапуском кибора не лечится. Лечится если закрыть окно целевой программы и снова открыть.
Как сбросить эту глобальную переменную опять в реальные нулевые координаты окна? Помогите.
5. Zireael - 19 Августа, 2021 - 06:36:31 - перейти к сообщению
Клик мышкой к получению координат никакого отношения не имеет. Ошибка где-то в вашем коде.
6. mattallen - 19 Августа, 2021 - 06:45:55 - перейти к сообщению
 Zireael пишет:
Клик мышкой к получению координат никакого отношения не имеет. Ошибка где-то в вашем коде.

Простите, но я использовать ваш код, в котором изменил название окна на своё. Закатив глазки
(Добавление)
 Zireael пишет:
Клик мышкой к получению координат никакого отношения не имеет. Ошибка где-то в вашем коде.

Screen и saveimage наглядно показывают смещение координаты. Хочу обратить внимание, что клик по кнопке не меняет эту глобальную переменную. Меняет клик по форме для ввода текста.
(Добавление)
1.bmp - результат первой итерации скрипта, 2.bmp - второй.
Скрытый текст:
Для просмотра Вам необходимо авторизоваться и оставить не менее 200 сообщений


Код использовался:
CODE:

#define NULL 0
external(INT, "MapWindowPoints", "MapWindowPoints", "User32.dll");

int s[3000][3000];

win boxs[1];
boxs[0] = window ("Nox", "Qt5QWindowIcon", window ("Tasya", "Qt5QWindowIcon", -1));

//loop(){
for (int a=0; a<sizearray(boxs); a++)
{
activate(boxs[a]); // активировать окно
pause(2000);
mouseleft(262,575,boxs[a]); //click to insert captcha
screen (#s[0][0], 0, 0, 565, 964, boxs[a]);
saveimage(#s[0][0], "E:\Downloads\kibor_set\1.bmp");
}
//} //loop

function mouseleft(int x, int y, win box)
{
int Points[2];
Points[0] = x; Points[1] = y;
MapWindowPoints(formatwi(box), NULL, address(#Points[0]), 1); // пересчитать координаты в экранные
mousemove(Points[0], Points[1]); // навести курсор
mouse(LEFT, Points[0], Points[1]);
}
7. Zireael - 19 Августа, 2021 - 17:45:17 - перейти к сообщению
CODE:
win boxs[1];
boxs[0] = window ("Nox", "Qt5QWindowIcon", window ("Tasya", "Qt5QWindowIcon", -1));
messagebox(formatwi(boxs[0]));

Запустить этот код, запомнить хендл окна, кликнуть на картинку или куда там делается клик, снова запустить код, скорее всего хендл будет отличаться.
8. mattallen - 20 Августа, 2021 - 07:47:06 - перейти к сообщению
 Zireael пишет:
CODE:
win boxs[1];
boxs[0] = window ("Nox", "Qt5QWindowIcon", window ("Tasya", "Qt5QWindowIcon", -1));
messagebox(formatwi(boxs[0]));

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

Такой же как первоначальный. Идентичное имя. Растерялся
9. Zireael - 20 Августа, 2021 - 17:46:00 - перейти к сообщению
С блокнотом этот код работает.
10. mattallen - 21 Августа, 2021 - 06:10:29 - перейти к сообщению
 Zireael пишет:
С блокнотом этот код работает.

Согласен. Проблема изначально в киборе, который по какой-то причине получает или отдает фейковые 0,0 координаты окна. Придется написать костыль. Хм

Powered by ExBB FM 1.0 Final