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

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

1. Duat - 19 Января, 2022 - 04:41:02 - перейти к сообщению
Добрый день. Столкнулся с весьма интересной ситуацией.

Имеется окно, к которому нужно привязаться, чтобы работало в фоновом режиме.
Имя собранного 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-файл мог привязаться к окну?
2. Kibor - 19 Января, 2022 - 04:48:57 - перейти к сообщению
Получить указатели на все окна открытых процессов 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]));
}
3. Zireael - 19 Января, 2022 - 06:02:15 - перейти к сообщению
 Цитата:
Что нужно сделать, чтобы exe-файл мог привязаться к окну?

CODE:
regexreplace(1, #name_exe, name_exe, " ", "", RIGHTTOLEFT); // удалить пробел в конце строки
4. Duat - 19 Января, 2022 - 06:03:14 - перейти к сообщению
Проблема в том, что если я пропишу название окна, к которому хочу привязаться в киборе - все работает.

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

Хотелось бы узнать, что я не так делаю. Возможно ошибка в коде..?
5. Kostick - 19 Января, 2022 - 06:47:25 - перейти к сообщению
 Duat пишет:
Проблема в том, что если я пропишу название окна, к которому хочу привязаться в киборе - все работает.

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

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

Не могу точно утверждать, но не всегда название EXE-файла совпадает с запущенным процессом. Но я тоже, как и вы, не знаю, как можно было бы обойти этот момент. Предложить переименовать EXE-файл в название процесса будет глупой идеей?
6. Kibor - 19 Января, 2022 - 07:33:14 - перейти к сообщению
Вообще не ясно что хочется.
Это зачем вообще?
 Duat пишет:
Имя собранного exe файла = имя окна, к которому нужно "привязаться".

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

Будет описан вопрос, а не что делается - будут советы.
7. Duat - 19 Января, 2022 - 08:03:26 - перейти к сообщению
Есть игра, запущенна в несколько окон.
Имя в шпионе кибора у каждого окна игры уникальное ("WoW - qwe", "WoW - fds", "WoW - ert" ).
Для того, чтобы бот работал сразу с несколькими окнами - нужно запустить сразу несколько собранных экзешников кибора.

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

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

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

Совет с удалением пробела в конце, не помог. Все равно не видит окно..
8. Kibor - 19 Января, 2022 - 08:45:59 - перейти к сообщению
Весь код писать не буду.

Начало:
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);//Получаем указатели на все окна игр


Затем с помощью Обмен данными между программами и скриптами
И другими функциями составляем алгоритм, который позволяет запускать бот привязав его к определенному окну, который даст знать другим ботам что данное окно привязано и надо выбрать следующее.
9. Zireael - 19 Января, 2022 - 17:05:05 - перейти к сообщению
 Цитата:
Совет с удалением пробела в конце, не помог. Все равно не видит окно..

Значит что-то не так сделали, так работает.
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 ("окно есть");
10. Kibor - 20 Января, 2022 - 09:09:00 - перейти к сообщению
Данный скрипт позволяет запускать всего один EXE бота нужное количество раз (сколько окон игры) и каждая копия привяжется автоматически к своему окну игры.
Не зависим от названий окон игры.


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



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

Работает по принципу проверки буферов всех ботов, в которые они записывают к какому окну привязались. Обмен данными между программами и скриптами

Powered by ExBB FM 1.0 Final