Что нового

Организация поиска окна

V

VitAl2013

Гость
Помогите разобраться как мне отыскать и активировать окно (WinActivate()) по началу и концу его имени (оно в середине меняется) Вроде надо активировать AutoItSetOption("WinTitleMatchMode", 4) а вот как дальше? Мне как бы надо активировать окно с именем abc*xyz где * - это любое кол-во любых знаков
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Если начало всегда неизменно, и других таких окон с таким же началом нет, то без всяких опций, просто
Код:
WinActivate('abc')

Если же таких окон несколько, а нужно активировать одну, у которой динамическая часть есть _sometitle_ (например abc_sometitle_xyz), то надо выставить опцию, а потом искать
Код:
Opt("WinTitleMatchMode", 2)
WinActivate('_sometitle_')

эта опцию ищет вхождение строки в любом месте, не обязательно с начала
 
Автор
V

VitAl2013

Гость
Я как-раз этой переменной части не знаю, знаю только abc и xyz Мне надо чтоб при поиске между ними могли находиться любые знаки в любом кол-ве. При этом abc это не начало имени окна, перед ним тоже есть переменная часть. Если я буду искать совпадения c abc в любом месте, то он мне найдёт много окон, а вот окно где есть и abc и xyz одно. Мне его и надо поймать.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Тогда без RegExp'ов, скорее всего, никак.
Шаги примерно такие
1. Записываешь заголовки всех окон
2. Строишь свой шаблон, но так, чтобы он четко идентифицировал нужное тебе окно
3. проверяешь все заголовки на предмет соответствия шаблону
4. как только нужное окно найдено - активируешь его.
примерный код
Код:
$aWin = WinList(); массив из всех заголовков окон и их хендлов
$sPattern = '^.*(abc).*(xyz)$'; у меня сработало. только xyz - должно быть именно в конце, если нет, надо убрать знак $
For $i = 1 to $aWin[0][0]
   If StringRegExp($aWin[$i][0], $sPattern) Then WinActivate($aWin[$i][0]); нужное окно найдено, активируем
Next
 

Daymos

Новичок
Сообщения
8
Репутация
1
Предлагаю активировать универсальнее. А то потом будет что-нибудь подобное писать и может ошибку сделать.
Код:
WinActivate($aWin[$i][1])
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
В аутоит есть возможность поиска оконо используя RegExp (кстати по моей просьбе в аутоит была также добавлена возможность поиска заголовоков по классам используя RegExp), делается это так:

Код:
WinActivate("[REGEXPTITLE:abc.*xyz]")
 
Автор
V

VitAl2013

Гость
Изюмительно, спасибо!
Как теперь отметить тему что вопрос решён? - всё нашёл
 
Верх