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

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

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

> Описание: Как привязать запущенные копии бота к разным окнам
Duat
Отправлено: 19 Января, 2022 - 12:41:02
Post Id



Пользователь
Наблюдатель


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




Добрый день. Столкнулся с весьма интересной ситуацией.

Имеется окно, к которому нужно привязаться, чтобы работало в фоновом режиме.
Имя собранного exe файла = имя окна, к которому нужно "привязаться".

Имя окна в шпионе выглядит так:

CODE:
window ("WoW - Stepway", "trinityWindow", -1)


Соответственно Exe-файл называем "WoW - Stepway".

Имя exe-шника получаем следующим образом:

CODE:
external(INT, "GetCommandLine", "GetCommandLineA", "Kernel32.dll");
int adres = GetCommandLine();
int i=0;
string command="";
loop()
{
char c = addressc(adres+i);
if(formatci(c) == 0)break;
command=command+c;
i++;
}

string name_exe;
messagebox(command);
regexreplace(-1, #command, command, "\^"", ""); // удалить кавычки
regexreplace(-1, #command, command, ".exe", ""); // удалить .exe
regexsearch(1, #name_exe, command, "[^\\]+", RIGHTTOLEFT); // найти имя exe
messagebox(name_exe);


Делаем привязку к окну:

CODE:
win W_Kib=window (name_exe, "trinityWindow", -1);
pause(1000);
if (W_Kib==0)messagebox ("окна нет");


Поидее должно получаться, но exe-файл не может найти окно..

Если вручную прописать имя, то все нормально привязывается:

CODE:
external(INT, "GetCommandLine", "GetCommandLineA", "Kernel32.dll");
int adres = GetCommandLine();
int i=0;
string command="";
loop()
{
char c = addressc(adres+i);
if(formatci(c) == 0)break;
command=command+c;
i++;
}

command="C:\kibor\WoW - Stepway.exe";

string name_exe;
messagebox(command);
regexreplace(-1, #command, command, "\^"", ""); // удалить кавычки
regexreplace(-1, #command, command, ".exe", ""); // удалить .exe
regexsearch(1, #name_exe, command, "[^\\]+", RIGHTTOLEFT); // найти имя exe
messagebox(name_exe);


Что нужно сделать, чтобы exe-файл мог привязаться к окну?

(Отредактировано автором: 19 Января, 2022 - 12:43:14)

 
 Top
Kibor
Отправлено: 19 Января, 2022 - 12:48:57
Post Id



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


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




Получить указатели на все окна открытых процессов notepad.exe
Поиск указателей по названию запущенных exe
CODE:
win w[100];
int PID=findprocess("notepad.exe");
int k=listwinprocess(#w[0], PID);
for (int n=0; n<k; n++)
{
setwindowparam (w[n]);
//Тут мы знаем все указатели на все шлавные окна процессов notepad.exe
messagebox (w.name[n]+" - "+w.class[n]+" -- "+format(w.left[n])+" - "+format(w.widthclient[n]));
}
 
 Top
Zireael
Отправлено: 19 Января, 2022 - 14:02:15
Post Id



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


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




 Цитата:
Что нужно сделать, чтобы exe-файл мог привязаться к окну?

CODE:
regexreplace(1, #name_exe, name_exe, " ", "", RIGHTTOLEFT); // удалить пробел в конце строки
 
 Top
Duat
Отправлено: 19 Января, 2022 - 14:03:14
Post Id



Пользователь
Наблюдатель


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




Проблема в том, что если я пропишу название окна, к которому хочу привязаться в киборе - все работает.

А если взять название окна из название ЕХЕ-файла - не получается привязаться...

Хотелось бы узнать, что я не так делаю. Возможно ошибка в коде..?

(Отредактировано автором: 19 Января, 2022 - 14:08:57)

 
 Top
Kostick
Отправлено: 19 Января, 2022 - 14:47:25
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 178
Дата рег-ции: Авг. 2020  
Репутация: 1




 Duat пишет:
Проблема в том, что если я пропишу название окна, к которому хочу привязаться в киборе - все работает.

А если взять название окна из название ЕХЕ-файла - не получается привязаться...

Хотелось бы узнать, что я не так делаю. Возможно ошибка в коде..?

Не могу точно утверждать, но не всегда название EXE-файла совпадает с запущенным процессом. Но я тоже, как и вы, не знаю, как можно было бы обойти этот момент. Предложить переименовать EXE-файл в название процесса будет глупой идеей?
 
 Top
Kibor
Отправлено: 19 Января, 2022 - 15:33:14
Post Id



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


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




Вообще не ясно что хочется.
Это зачем вообще?
 Duat пишет:
Имя собранного exe файла = имя окна, к которому нужно "привязаться".

Какого собранного?? И зачем его именовать в окно к которому привязаться?
Все делается не верно.

Будет описан вопрос, а не что делается - будут советы.
 
 Top
Duat
Отправлено: 19 Января, 2022 - 16:03:26
Post Id



Пользователь
Наблюдатель


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




Есть игра, запущенна в несколько окон.
Имя в шпионе кибора у каждого окна игры уникальное ("WoW - qwe", "WoW - fds", "WoW - ert" ).
Для того, чтобы бот работал сразу с несколькими окнами - нужно запустить сразу несколько собранных экзешников кибора.

А для того, чтобы каждый экзешник работал со своим окном игры - Нужно как-то привязать каждый Kibor-EXE к своему окну.

Проще всего изначально задать EXE-файлам кибора имена окон, с которыми они будут работать.

Как это сделать проще всего?

Совет с удалением пробела в конце, не помог. Все равно не видит окно..

(Отредактировано автором: 19 Января, 2022 - 16:06:19)

 
 Top
Kibor
Отправлено: 19 Января, 2022 - 16:45:59
Post Id



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


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




Весь код писать не буду.

Начало:
CODE:
win w_bot[10];
int k_bot=window (#w_bot[0], "BOT");//Получаем указатели на все боты которые имеют имена BOT
win w_game[10];
int k_game=window (#w_game[0], -1, "trinityWindow", -1);//Получаем указатели на все окна игр


Затем с помощью Обмен данными между программами и скриптами
И другими функциями составляем алгоритм, который позволяет запускать бот привязав его к определенному окну, который даст знать другим ботам что данное окно привязано и надо выбрать следующее.
 
 Top
Zireael
Отправлено: 20 Января, 2022 - 01:05:05
Post Id



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


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




 Цитата:
Совет с удалением пробела в конце, не помог. Все равно не видит окно..

Значит что-то не так сделали, так работает.
CODE:
external(INT, "GetCommandLine", "GetCommandLineA", "Kernel32.dll");
int adres = GetCommandLine();
int i=0;
string command="";
loop()
{
char c = addressc(adres+i);
if(formatci(c) == 0)break;
command=command+c;
i++;
}

string name_exe;
//messagebox(command);
regexreplace(-1, #command, command, "\^"", ""); // удалить кавычки
regexreplace(-1, #command, command, ".exe\s*", ""); // удалить .exe и пробел если есть
regexsearch(1, #name_exe, command, "[^\\]+", RIGHTTOLEFT); // найти имя exe
//messagebox(name_exe);


win W_Kib = window (name_exe, "trinityWindow", -1);
if(W_Kib==0)messagebox ("окна нет");
else messagebox ("окно есть");
 
 Top
Kibor
Отправлено: 20 Января, 2022 - 17:09:00
Post Id



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


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




Данный скрипт позволяет запускать всего один EXE бота нужное количество раз (сколько окон игры) и каждая копия привяжется автоматически к своему окну игры.
Не зависим от названий окон игры.


Код (Отобразить)



EXE бота надо переименовать в "bots.exe"
1 - Запустим 3 окна игры (в данном случае блокнота)
2 - Запустим 3 копии bots.exe
3 - Нажмем в каждой - Запустить
4 - Через пару секунд нажмем конрл шифт Z и остановим боты.
5 - Увидим что названия ботов поменялись и приняли заголовки окон блокнотов к которым привязаны.

Работает по принципу проверки буферов всех ботов, в которые они записывают к какому окну привязались. Обмен данными между программами и скриптами
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by