подскажите как найти окно игры по классу, если класс меняется при каждом запуске игры
единственная закономерность заключается в первых шести символах класса
могут быть такие 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);
но не понимаю как его составить
1. Greaty - 30 Апреля, 2020 - 02:33:24 - перейти к сообщению
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;
}
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 - перейти к сообщению
Спасибо !! то что надо, работает идеально!!!