Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 3.07 Получения указателя win и обновление экрана

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

11. Cocacaca - 03 Сентября, 2018 - 01:58:56 - перейти к сообщению
замкнутый цикл на поиске окна по классу данного окна , пока не найдет, и как нашел - пошел дальше, бывает что определяет почему-то Кибор, и выводит мне название окна "Кибор" Не понял , хотя у меня при поиске явное указание на класс и должно вывести название окна
12. Zireael - 03 Сентября, 2018 - 03:30:48 - перейти к сообщению
 Цитата:
замкнутый цикл на поиске окна по классу данного окна

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

Если я танки запущу, то наверное второго такого окна точно нету и я бы это увидел Ха-ха
Если через функцию start(танки); запустить танки, то он бывает не находит по классу окна это окно!
ПЫ СЫ танки были приведены к примеру, так как окно уникальное, и если их 2, это увидит любой. Речь идет о программах у которых имя может меняться, поэтому к имени нет возможности привязаться! Точно так же как позиция и размер. Поэтому поиск веду исключительно по классу. Но не всегда почему-то это выходит!
14. Kibor - 04 Сентября, 2018 - 11:50:03 - перейти к сообщению
Cocacaca , Вопрос не имеет смысла, так как не несет информации для его решения.
Описанное вами поведение не наблюдалось.
http://kibor-bot.com/forum/topic...?forum=5&topic=1
15. Cocacaca - 09 Октября, 2018 - 03:46:20 - перейти к сообщению
Немного поясню конкретнее.
Есть эмулятор 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");
}
16. Zireael - 09 Октября, 2018 - 04:16:38 - перейти к сообщению
 Цитата:
win wind = (-1, "Qt5QWindowIcon", -1);

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

Сначала вызыватся start_(), в котором w_KIB=window ("QWidgetClassWindow", "Qt5QWindowIcon", wind). Потом запускается nox.
Т. е. ищется указатель, а потом открывается приложение. Надо наоборот, сначала запустить nox, а потом получать указатель.
17. Cocacaca - 09 Октября, 2018 - 04:23:18 - перейти к сообщению
Понял в чем загвоздка...
Контрол к которому наши send`ы все привязаны, сбрасывается, надо его реанимировать и проблема решена.
Всем спасибо за внимание и участиеУлыбка
(Добавление)
 Zireael пишет:
 Цитата:
win wind = (-1, "Qt5QWindowIcon", -1);

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

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

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

Просто при перезапуске, вдруг закрылся нокс, у нас w_KIB сдыхает и ему надо заново указатель на окно сделать.
18. Zireael - 30 Января, 2019 - 18:15:31 - перейти к сообщению
 Цитата:
Можно как-то получить указатель на программу не по координатам и не по названию?
Например, запустить ее через start и сразу получить указатель.

Можно получить id процесса или потока, когда окно откроется получить хендл.
Скрипт запускает exe, ждёт когда окно откроется, получает указатель и заполняет структуру win. Использовать если открыто несколько окон с одинаковым именем или классом.
Получение указателя для запускаемого окна. (Отобразить)
19. 007wan - 26 Февраля, 2019 - 08:42:04 - перейти к сообщению
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);

работает только тогда, когда его вызываешь вне ФУНКЦИЙ и вне условий
20. Kibor - 26 Февраля, 2019 - 08:53:14 - перейти к сообщению
А у вас заголовок мозиллы "окно"?
И переменные типа win надо объявлять только глобальными для заполнения ее структуры.

Powered by ExBB FM 1.0 Final