Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Как найти окно игры по классу, если класс меняется при каждом запуске?

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

1. Greaty - 30 Апреля, 2020 - 02:33:24 - перейти к сообщению
подскажите как найти окно игры по классу, если класс меняется при каждом запуске игры
единственная закономерность заключается в первых шести символах класса
могут быть такие I?W?8? а могут быть такие ?I?W?8 - все остальные символы в имени класса - знаки вопроса "?"
после первых шести символов может быть от 1 до 25 знаков вопросов

вот примеры имен класса за 50 запусков игры
I?W?8??????????????????????????
I?W?8???????????????????????
I?W?8??????????????????
I?W?8?????????????
I?W?8???????????
I?W?8??

?I?W?8?????????????????????????
?I?W?8??????????????????????
?I?W?8??????????????????
?I?W?8????????????
?I?W?8??????????
?I?W?8??

Предполагаю, что все это можно сделать через регулярное выражение

win wind = window (-1, "регулярное выражение которое ищет от 7 до 31 символов в которых присутствуют IW8 а все остальные '?'", -1);

но не понимаю как его составить
2. Zireael - 30 Апреля, 2020 - 03:48:07 - перейти к сообщению
CODE:
external(INT, "FindWindowEx", "FindWindowExA", "User32.dll");
external(INT, "GetClassName", "GetClassNameA", "User32.dll");

string name = "IW8\?"; // из каких символов может быть класс окна
// спецсимволы должны быть экранированы, т. е. написаны через \ (например: \!\?)

win w = formatiw(find_window(name));
if(w)
{
setwindowparam(w);
messagebox(w.name+formatic(13)+formatic(10)+w.class);
}
else messagebox("Окно не найдено");




function find_window(string class_window)
{
char class[999];
string temp;
int handle=FindWindowEx(0, 0, 0, 0);
while(handle)
{
if(GetClassName(handle, address(#class[0]), sizearray(class)))
{
if(regexsearch(1, #temp, format(#class[0]), "^["+class_window+"]+$"))return handle;
}
handle=FindWindowEx(0, handle, 0, 0);
}
return 0;
}
3. Greaty - 30 Апреля, 2020 - 05:24:11 - перейти к сообщению
Спасибо !! то что надо, работает идеально!!!

Powered by ExBB FM 1.0 Final