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

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

1. Kostick - 16 Января, 2022 - 07:19:14 - перейти к сообщению
Пытаюсь сделать бота в БДО, но не получается отправлять команды нажатия и перемещения мыши или нажатия клавиш в окно в фоне, хотя если отправлять в другое окно в фоне, например, в окно блокнота, то все работает.
Например, код нажимает раз в 5 секунд клавишу i. В БДО должно открываться окно инвентаря. Вот как работает в блокноте, и как в БДО:(для просмотра ссылки Вам необходимо авторизоваться) Т.е. в БДО при запуске активируется окно БДО, и нажатия передаются, но когда вручную переходишь на другое окно (на видео я нажал на визуальный редактор), нажатия прекращаются.
Единственное, у окна БДО не контрола в отличии от блокнота, поэтому приходится указывать просто имя окна:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Есть ли еще варианты передачи нажатий клавиш и мыши в окно в фоне?
есть функция "activate(wind);", но она активирует окно полностью, и тогда не получится работать в другом окне. Может у вас есть идеи?
Есть видео от Vladimir Borda Работа "Кибор в скрытом окне игры под Фростом", где он показывает код, который сворачивает окно и выводит его уменьшенную копию сбоку, при этом клики в него отправляются. Я попробовал так же, вот что происходит (работа сопровождается повторяющимися звуками ошибки):(для просмотра ссылки Вам необходимо авторизоваться) Вот код:
CODE:
win W_Kib=selectwindow ("Black Desert - 406459");
//win W_Kib=window ("Black Desert - 406459", "BlackDesertWindowClass", -1);

int eX_Kib, eY_Kib;
eX_Kib=W_Kib.widthclient;
eY_Kib=W_Kib.heightclient;

activate(W_Kib);
transparency (0, W_Kib);
visualwindow(0, 0, 0, W_Kib.widthclient, W_Kib.heightclient, 1095, 565, 25, W_Kib);
KIB_1: Key(1, W_Kib, 0, 73, "Клик", 0);
sleep (500);
goto KIB_1;

function Key(int ew, win w, int p1, int c, string k, int p2)
{
pause(p1);
if (ew==0)
{
if (k=="Клик"){key(c); goto hy;}
if (k=="Нажать"){keydown(c); goto hy;}
if (k=="Отпустить"){keyup(c); goto hy;}
}
if (ew==1)
{
if (k=="Клик"){sendkey(c, w); goto hy;}
if (k=="Нажать"){sendkeydown(c, w); goto hy;}
if (k=="Отпустить"){sendkeyup(c, w); goto hy;}
}
hy: pause (p2);
}

Если вместо "selectwindow" использовать просто "window", то окно выводится, но клики так же не передаются:(для просмотра ссылки Вам необходимо авторизоваться)
2. ivantu - 16 Января, 2022 - 10:11:08 - перейти к сообщению
Баг наверное, функция нажатий принимает w вместо W_Kib попробуйте так :

CODE:
win W_Kib=window ("Chrome Legacy Window", "Chrome_RenderWidgetHostHWND", window ("Работа в фоне через визуальный редактор — Яндекс.Браузер", "YandexBrowser_WidgetWin_1", -1));

win w=W_Kib;
3. Kostick - 16 Января, 2022 - 10:26:08 - перейти к сообщению
 ivantu пишет:
Баг наверное, функция нажатий принимает w вместо W_Kib попробуйте так :

CODE:
win W_Kib=window ("Chrome Legacy Window", "Chrome_RenderWidgetHostHWND", window ("Работа в фоне через визуальный редактор — Яндекс.Браузер", "YandexBrowser_WidgetWin_1", -1));

win w=W_Kib;

Я так понял, это не баг, а защита так работает, что только в активном окне приходят команды.
Немного не понял, что мне надо вписывать в скобках после первого "window" и после второго?
4. Kibor - 16 Января, 2022 - 10:30:37 - перейти к сообщению
 ivantu пишет:
функция нажатий принимает

функция нажатий принимает любое имя переменной типа win
5. ivantu - 16 Января, 2022 - 12:04:21 - перейти к сообщению
del (Отобразить)
6. Zireael - 16 Января, 2022 - 12:12:22 - перейти к сообщению
 Цитата:
то он сам наверное должен подставлять переменные нужные.

Они подставлены как надо
 Цитата:
Key(1, W_Kib, 0, 73, "Клик", 0);

функция принимает переменную
 Цитата:
function Key(int ew, win w, int p1, int c, string k, int p2)

т. е. в функции используется w, но по сути это и есть W_Kib.
7. ivantu - 16 Января, 2022 - 12:15:16 - перейти к сообщению
 Zireael пишет:
т. е. в функции используется w, но по сути это и есть W_Kib.


Проглядел, Вы правы, глаза замылились, нужен перерыв.
8. Kostick - 17 Января, 2022 - 01:33:10 - перейти к сообщению
 Kostick пишет:

Вот код:
CODE:
//win W_Kib=selectwindow ("Black Desert - 406459");
win W_Kib=window ("Black Desert - 406459", "BlackDesertWindowClass", -1);

int eX_Kib, eY_Kib;
eX_Kib=W_Kib.widthclient;
eY_Kib=W_Kib.heightclient;

activate(W_Kib);
transparency (0, W_Kib);
visualwindow(0, 0, 0, W_Kib.widthclient, W_Kib.heightclient, 1095, 565, 25, W_Kib);
KIB_1: Key(1, W_Kib, 0, 73, "Клик", 0);
sleep (500);
goto KIB_1;

function Key(int ew, win w, int p1, int c, string k, int p2)
{
pause(p1);
if (ew==0)
{
if (k=="Клик"){key(c); goto hy;}
if (k=="Нажать"){keydown(c); goto hy;}
if (k=="Отпустить"){keyup(c); goto hy;}
}
if (ew==1)
{
if (k=="Клик"){sendkey(c, w); goto hy;}
if (k=="Нажать"){sendkeydown(c, w); goto hy;}
if (k=="Отпустить"){sendkeyup(c, w); goto hy;}
}
hy: pause (p2);
}


В общем я понял, что все работает, как на видео:(для просмотра ссылки Вам необходимо авторизоваться) Окно сворачивается, нажатия передаются, но это мнимое сворачивание, т.к. мышка двигается по экрану, как при несвернутом окне. Но хотя бы можно смотреть сериалы, не взаимодействуя с экраном. Жаль, с фоновой работой ничего не вышло.

Powered by ExBB FM 1.0 Final