Тема: AHK: циклы непонятно себя ведут в теле функции
Пытаюсь понять в чём проблема. В общем: ищем тайтлы всех окон, во вложенном цикле сверяем каждый с массивом заданных, складываем через "|" совпадения в одну строку. Если через Gosub всё отрабатывается вполне ожидаемо,
titles := ["aaa", "bbb", "ccc", "ddd", "Sublime", "Firefox", "Chrome"]
Gosub, getwinstr
titlematch=%winlst%
MsgBox, % titlematch ;ЗДЕСЬ МЫ ВИДИМ СОВПАВШИЙ ТАЙТЛ
getwinstr:
winlst := ""
WinGet, winid, List,,,
Loop, %winid%
{
this_id := winid%A_Index%
WinGetTitle, this_title, ahk_id %this_id%
if (this_title = "")
continue
for i in titles
{
If InStr(this_title, titles[i])
{
sstr := titles[i]
winlst = %winlst%`|%sstr%
break
} } }
return
а если через функцию - внутренний цикл даже не стартует.
titles := ["aaa", "bbb", "ccc", "ddd", "Sublime", "Firefox", "Chrome"]
titlematch:=getwinstr()
MsgBox, % titlematch
getwinstr()
{
winlst := ""
WinGet, winid, List,,,
Loop, %winid%
{
this_id := winid%A_Index%
WinGetTitle, this_title, ahk_id %this_id%
if (this_title = "")
continue
for i in titles
{
MsgBox, % this_title ; ВОТ ЭТО МЫ НЕ ВИДИМ Т_Т
If InStr(this_title, titles[i])
{
sstr := titles[i]
winlst = %winlst%`|%sstr%
break
} } }
return winlst
}
Куда копать? Мало инфы по вложенным циклам в AHK или просто я искал не там.
UPD: Всем спасибо! Подсказки помогли разобраться с видимостью переменных.
Надо было массив объявлять так:
global titles := ["aaa", "bbb", "ccc", "ddd", "Sublime", "Firefox", "Chrome"]
Или добавить в тело функции инструкцию:
global titles
....Ну или, в случае ненадобности массива глобально - задавать его внутри функции.
Ещё раз всем спасибо! Тему можно закрывать.