Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Описание: Доработка получения указателя win и обновление экрана..
Cocacaca
Отправлено: 03 Сентября, 2018 - 09:58:56
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2017  
Репутация: 0




замкнутый цикл на поиске окна по классу данного окна , пока не найдет, и как нашел - пошел дальше, бывает что определяет почему-то Кибор, и выводит мне название окна "Кибор" Не понял , хотя у меня при поиске явное указание на класс и должно вывести название окна
 
 Top
Zireael
Отправлено: 03 Сентября, 2018 - 11:30:48
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4385
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
замкнутый цикл на поиске окна по классу данного окна

В системе может быть несколько окон с одинаковым классом.
Искать окно можно ещё по имени, позиции и размеру.
 Цитата:
window("название окна", "класс окна", лев_верх_X, лев_верх_Y, шир, выс, win wind) индифицирует по имени, класу, позиции относительно верхнего контрола, размеру и указателю на верхний контрол. Если вместо указателя на верхний контрол поставить -1, позиция считается относительно левого верхнего угла экрана.
 
 Top
Cocacaca
Отправлено: 04 Сентября, 2018 - 17:02:44
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2017  
Репутация: 0




 Zireael пишет:
В системе может быть несколько окон с одинаковым классом.

Если я танки запущу, то наверное второго такого окна точно нету и я бы это увидел Ха-ха
Если через функцию start(танки); запустить танки, то он бывает не находит по классу окна это окно!
ПЫ СЫ танки были приведены к примеру, так как окно уникальное, и если их 2, это увидит любой. Речь идет о программах у которых имя может меняться, поэтому к имени нет возможности привязаться! Точно так же как позиция и размер. Поэтому поиск веду исключительно по классу. Но не всегда почему-то это выходит!
 
 Top
Kibor
Отправлено: 04 Сентября, 2018 - 19:50:03
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Cocacaca , Вопрос не имеет смысла, так как не несет информации для его решения.
Описанное вами поведение не наблюдалось.
http://kibor-bot.com/forum/topic...?forum=5&topic=1
 
 Top
Cocacaca
Отправлено: 09 Октября, 2018 - 11:46:20
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2017  
Репутация: 0




Немного поясню конкретнее.
Есть эмулятор Nox и иконка игры.
Задача: запустить нокс и найти иконку игры.
Происходит следубщее:
Если заранее протестировать указав на неактивное окно (передав переменную окна), картинка ищется моментально. Если же запустить start(Nox) Nox - строка с путем, то после старта Nox, даже если делать активным окно Nox через activate(), картинка отказывается находиться
CODE:

win wind = (-1, "Qt5QWindowIcon", -1);
string nox = "Path";
win w_KIB;
int ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;
int Image_0_KIB[500][500];

start_();

start(nox);
sleep(15000);

m_KIB2:
if (wind.width>-1 && wind.height>-1) goto m_KIB4;
else goto m_KIB3;
m_KIB4: if (findimage_(#Image_0_KIB[0][0], 7000, 0, 0, 1, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 100, 1, 0, 0, ex_KIB, ey_KIB, #sum_KIB, #x_KIB, #y_KIB)>0) goto m_KIB5;
else goto m_KIB2;
m_KIB3: sleep(2000);
goto m_KIB2;
m_KIB5:

function start_()
{
load_image_();
pause(1000);
w_KIB=window ("QWidgetClassWindow", "Qt5QWindowIcon", wind);
ex_KIB=w_KIB.widthclient; ey_KIB=w_KIB.heightclient;
}


function findimage_(int #Image, int t, int p1, int p2, int m, int xm, int ym, int mov_m, int mov_x, int mov_y, int p3, int wait, int cycle, int fon, int r, int p, int k, int xs, int ys, int xf, int yf, int#sum, int#x, int#y)
{
int timKIB, sumKIB, xKIB, yKIB, tx, ty, tcycle=0;
sty: pause(p1);
sumKIB=0;
if (t!=0) timKIB=gettime();
a: if (r==0 && p==100){sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, w_KIB); if (sum>0) goto e;}
else {sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, w_KIB); if (sum>0) goto e;}
if (t==0) return 0;
if (gettime()-timKIB<t){sleep(20); goto a;}
return 0;
e: sumKIB=sum; xKIB=x[0]; yKIB=y[0];
pause(p2);
if (m==1){sendmouse(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==2){sendmouse(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==3){sendmouse(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==4){sendmousedown(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==5){sendmousedown(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==6){sendmousedown(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==7){sendmouseup(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==8){sendmouseup(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==9){sendmouseup(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==10){sendmousedbl(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==11){sendmousedbl(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==12){sendmousedbl(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==13)sendmousemove(xs+xKIB+xm, ys+yKIB+ym, w_KIB);
hy: if (mov_m==1)sendmousemove(mov_x, mov_y, w_KIB);
if (m>0 && m<14)pause(p3);
if (wait!=-1)
{
for (int ttim=gettime(); gettime()-ttim<wait; sleep(20))
{
if (r==0 && p==100){if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, w_KIB)==0)return sumKIB;}
else {if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, w_KIB)==0)return sumKIB;}
}
if (tcycle<cycle){tcycle++; goto sty;}
return 0;
}
return sumKIB;
}
function load_image_()
{
loadimage (#Image_0_KIB[0][0], "C:\Image_0.bmp");
}

(Отредактировано автором: 09 Октября, 2018 - 11:47:38)

 
 Top
Zireael
Отправлено: 09 Октября, 2018 - 12:16:38
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4385
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
win wind = (-1, "Qt5QWindowIcon", -1);

Неправильно, надо window(-1, "Qt5QWindowIcon", -1). К тому же не имеет смысла, окно ведь не открыто.

Сначала вызыватся start_(), в котором w_KIB=window ("QWidgetClassWindow", "Qt5QWindowIcon", wind). Потом запускается nox.
Т. е. ищется указатель, а потом открывается приложение. Надо наоборот, сначала запустить nox, а потом получать указатель.
 
 Top
Cocacaca
Отправлено: 09 Октября, 2018 - 12:23:18
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2017  
Репутация: 0




Понял в чем загвоздка...
Контрол к которому наши send`ы все привязаны, сбрасывается, надо его реанимировать и проблема решена.
Всем спасибо за внимание и участиеУлыбка
(Добавление)
 Zireael пишет:
 Цитата:
win wind = (-1, "Qt5QWindowIcon", -1);

Неправильно, надо window(-1, "Qt5QWindowIcon", -1). К тому же не имеет смысла, окно ведь не открыто.

Сначала вызыватся start_(), в котором w_KIB=window ("QWidgetClassWindow", "Qt5QWindowIcon", wind). Потом запускается nox.
Т. е. ищется указатель, а потом открывается приложение. Надо наоборот, сначала запустить nox, а потом получать указатель.

Спасибо за ответ, это беглый пример, там все переменные забиты изначально до запуска этих строк кода, поэтому wind у меня уже полностью расписан как положено.

Просто при перезапуске, вдруг закрылся нокс, у нас w_KIB сдыхает и ему надо заново указатель на окно сделать.

(Отредактировано автором: 09 Октября, 2018 - 12:26:02)

 
 Top
Zireael
Отправлено: 31 Января, 2019 - 02:15:31
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4385
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
Можно как-то получить указатель на программу не по координатам и не по названию?
Например, запустить ее через start и сразу получить указатель.

Можно получить id процесса или потока, когда окно откроется получить хендл.
Скрипт запускает exe, ждёт когда окно откроется, получает указатель и заполняет структуру win. Использовать если открыто несколько окон с одинаковым именем или классом.
Получение указателя для запускаемого окна. (Отобразить)
 
 Top
007wan
Отправлено: 26 Февраля, 2019 - 16:42:04
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1838
Дата рег-ции: Март 2017  
Репутация: -2




CODE:
if (message.lparam == Button1)
{
win w1 = window (-1, "MozillaWindowClass", -1);


if (w1.name == "Окно")
{
transparency (-1, w1);
}

}

Почему такая схема не работает, а работает только так:
CODE:
if (message.lparam == Button1)
{
win w1 = window (-1, "MozillaWindowClass", -1);
transparency (-1, w1);

if (w1.name == "Окно")
{

}

}

(Добавление)
Да, еще
CODE:
win w1 = window (-1, "MozillaWindowClass", -1);

работает только тогда, когда его вызываешь вне ФУНКЦИЙ и вне условий
 
 Top
Kibor
Отправлено: 26 Февраля, 2019 - 16:53:14
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




А у вас заголовок мозиллы "окно"?
И переменные типа win надо объявлять только глобальными для заполнения ее структуры.
 
 Top
Страниц (4): « 1 [2] 3 4 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by