Пропал в сети мой старый фак, выкладываю максимально последний.
# AutoHotKeys. FAQ
TB := MyGui.Add(«Edit», «r20 w600», «») MyGui.Add(«Button», «w80 vButtonOk», «okey»).OnEvent(«click»,ButtonOk) … ButtonOk(*) { MsgBox («well» TB.Text «!») ExitApp }
SendMessage, 0x50,, 0x4090409,, A ; английский
Взято из примера https://www.autohotkey.com/docs/v2/lib/ListView.htm#GetNext
#Requires AutoHotkey v2.0
MyGui := Gui()
LV := MyGui.Add("ListView", "r20", ["Name"])
LV.OnEvent("DoubleClick", LV_DoubleClick)
Loop read, "1.txt"
{
LV.Add(, A_LoopReadLine )
}
LV.ModifyCol
MyGui.Show
#HotIf WinActive(MyGui.hwnd)
Escape::ExitApp
Enter::
{
RowNumber := 0 ; This causes the first loop iteration to start the search at the top of the list.
Loop
{
RowNumber := LV.GetNext(RowNumber) ; Resume the search at the row after that found by the previous iteration.
if not RowNumber ; The above returned zero, so there are no more selected rows.
break
Text := LV.GetText(RowNumber)
MsgBox('The next selected row is #' RowNumber ', whose first field is "' Text '".')
}
MsgBox("YEA" LV.GetText(A_Index))
}
LV_DoubleClick(LV, RowNumber)
{
RowText := LV.GetText(RowNumber) ; Get the text from the row's first field.
ToolTip("You double-clicked row number " RowNumber ". Text: '" RowText "'")
}
if !FileExist("counter.txt")
FileAppend, 0, counter.txt
вообще все просто и почти как в PHP Дебилизм лишь в том что иногда надо в кавычках писать а иногда не надо
titleToActivate := "BZProcessDS"
hWnd := WinExist(titleToActivate)
PostMessage, WM_SYSCOMMAND := 0x0112, SC_HOTKEY := 0xF150, hWnd,, ahk_id %hWnd%
Loop, read, C:\Database Export.txt
{
Loop, parse, A_LoopReadLine, %A_Tab%
{
MsgBox, Field number %A_Index% is %A_LoopField%.
}
}
А так прочитать файл в объект/хэш:
current := Object()
Loop, read, % A_ScriptDir "\url.txt"
current[A_Index] := A_LoopReadLine
For i in current
itemlist .= "Item " A_Index " is: " current[i] "`n"
msgbox % itemlist
Это простой код, но есть в нете готовые развесистые функции… ну это просто минималка для поиска изображения на экране
CoordMode Pixel
Loop,
{
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, LinkFeed1.png
if (FoundX > 0) {
CoordMode Mouse, Screen
Click, %FoundX% %FoundY%
...
break
}
sleep, 200
}
CoordMode Pixel
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, LinkFeed1.png
CoordMode Mouse, Screen
Click, %FoundX% %FoundY%
Sleep, 100
CoordMode Pixel
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, LinkFeed2.png
CoordMode Mouse, Screen
Click, %FoundX% %FoundY%
Sleep, 100
Send, {Tab}^v{Tab}
FileRead, f, bg.txt
MsgBox, % f
RegExMatch(f, "s)<!`-`-StartFragment`-`->(.+)<!`-`-EndFragment`-`->", z)
MsgBox, % z
ClipboardGet_HTML( byref Data ) { ; www.autohotkey.com/forum/viewtopic.php?p=392624#392624
If CBID := DllCall( "RegisterClipboardFormat", Str,"HTML Format", UInt )
If DllCall( "IsClipboardFormatAvailable", UInt,CBID ) <> 0
If DllCall( "OpenClipboard", UInt,0 ) <> 0
If hData := DllCall( "GetClipboardData", UInt,CBID, UInt )
DataL := DllCall( "GlobalSize", UInt,hData, UInt )
, pData := DllCall( "GlobalLock", UInt,hData, UInt )
, VarSetCapacity( data, dataL * ( A_IsUnicode ? 2 : 1 ) ), StrGet := "StrGet"
, A_IsUnicode ? Data := %StrGet%( pData, dataL, 0 )
: DllCall( "lstrcpyn", Str,Data, UInt,pData, UInt,DataL )
, DllCall( "GlobalUnlock", UInt,hData )
DllCall( "CloseClipboard" )
Return dataL ? dataL : 0
}
If ClipboardGet_HTML( Data )
MsgBox, % Data
Else SoundBeep
нашел такую функцию, он генерит хероту какую-то ее еще чистить надо, а так то работает нормас.
Sleep, 2000
PixelGetColor, color, 1914, 993
while color != "0xC1C1C1" {
Sleep, 2000
PixelGetColor, color, 1914, 993
}
MsgBox, We in end
Можно так: echo MsgBox Hi | "C:\Program Files\AutoHotkey\AutoHotkey.exe" *
Но можно создать файл например в папке C:\Windows\ahk.bat @echo %* | "C:\Program Files\AutoHotkey\AutoHotkey.exe" *
тогда можно будет запускать еще проще: ahk MsgBox, 64, Hello, World
а вот так ! Gui Add, Edit, -E0x200
все вполне естественно и интуитивно
Gui, Color,, 464646 ; Edit bg
Gui Add, Edit, cDBC410; edit text color
для Text:
Gui, Color, 1A1A1A ; Text bg
Gui Add, Text, cDBC410 ; font color
Разница в том что для ГуйТекста через одну запятую, а для Едита, через 2 запятые.. ебать колотить.. а теперь что сказано в дкументации
https://www.autohotkey.com/docs/commands/Gui.htm#Color https://ahk-wiki.ru/gui#color
для ListView вообще делается так: GuiControl +BackgroundFF9977, MyListView
biga https://biga-ahk.github.io/biga.ahk/#/ Как его суку скачать ?
https://github.com/Chunjee/array.ahk Аналог biga.AutoHotKeys функции для работы с массивами, обновлялся не так давно
https://github.com/Chunjee/json.ahk JSON
#Include biga.ahk
a1:=[]
a2:=[]
r:=[]
Loop, Read, 1.txt
a1.Push(A_LoopReadLine)
Loop, Read, 2.txt
a2.Push(A_LoopReadLine)
A := new biga()
res = % A.difference(a1,a2)
MsgBox % A.join(res,"`n")
RunWait, %ComSpec% /c php 1.php >out.txt
LV_Modify(pos, "+Select +Focus")
ListView отличается от ListBox.. но плевать.. короче Алгортм такой: Для ЛистВью содаем срытую кнопку, которая будет работать по дефолту. В этой кнопке можно проверять в каком листвью сработало так что тут проблемм нет, но все равно выглядит костыльно.Кстати вся информация есть тут: https://www.autohotkey.com/docs/commands/ListView.htm https://ahk-wiki.ru/listview В событии кнопки мы узнаем номер строки, но нему берем текст. Вообщем-то все как обычно но синтаксис выматывает:
; draw GUI
Gui,Add,ListView,-hdr h400,RunColumn
Gui,Add,Button, Hidden Default, ok ; when press Enter in ListView, then run ButtonOK event
Gui,Show
...
ButtonOK:
numline := LV_GetNext(0, "Focused")
LV_GetText(rowtext, numline) ; Get the text from the row's first field.
MsgBox, Text: "%rowtext%"
return
Дикость тут еще и в том что Событие ButtonOK нигде не прописано но оно есть и срабатывает по дефолту для кнопки по нажатию кнопки Enter на форме. Может это даже и удобно хз.
^SPACE:: Winset, Alwaysontop, , A ; ctrl + space
Return
Перед тем как двигать окно надо его демаксимизировать, это главная хитрость
WinGet, WinStatus, MinMax, ahk_exe chrome.exe
if (WinStatus != 0)
WinRestore, ahk_exe chrome.exe
WinMove, ahk_exe chrome.exe,, 50, 50, 800, 600
Простой рабочий пример
z := []
z["name"] := "Boss"
z["nop"] := "nope"
MsgBox, % z["name"]
ключи в кавычках обязательно Если укажешь без кавычек, то огребеш ошибок
Сайт http://ahkey.ru — это сборник рецептов для AutoHotKeys, которые я добыл нелегким трудом. Часть ответов довольно просто найти, а часть пришлось выяснять на форуме поддержки, а часть нашлось в боевом крещении и борьбе с нелогизмами. Вообще я пишу все в одном единственном файле AutoHotKeys.md в разметке MarkDown. Как только я вношу новые изменения в этот файл. Я его отправляю на сервер. На сервере естественно написан небольшой скрипт на PHP:
$body = file_get_contents('php://input');
file_put_contents("AutoHotKeys.md",$body);
А локально что бы отправить я использую очень просто скрипт на AutoHotKeys:
MsgBox, start POST transfer AutoHotKeys.md to ahkey.ru
URL := "http://ahkey.ru/script.php"
HttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HttpObj.Open("POST", URL, 0)
HttpObj.SetRequestHeader("Content-Type", "application/json")
FileRead, Body, AutoHotKeys.md
HttpObj.Send(Body)
Result := HttpObj.ResponseText
Status := HttpObj.Status
msgbox % "status: " status "`n`nresult: " result
В такой схеме прекрасно все !
https://stackoverflow.com/questions/47855338/ahk-post-request-using-json-issue
URL := "http://localhost:8000/createPlayer"
HttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HttpObj.Open("POST", URL, 0)
HttpObj.SetRequestHeader("Content-Type", "application/json")
json_str := ({"name": "Any Name"})
Body := json_str
HttpObj.Send(Body)
MsgBox, %Body%
Result := HttpObj.ResponseText
Status := HttpObj.Status
msgbox % "status: " status "`n`nresult: " result
Gui, Add, ListBox, w200 r10 vSearchBox, %List%
OnMessage(0x0102, "WM_CHAR")
..
WM_CHAR(W, L, M, H) {
; LB_ERR = -1, LB_FINDSTRING = 0x018F, LB_SETCURSEL = 0x0186
Static PrevTick := A_TickCount
, Find := ""
If (A_GuiControl = "SearchBox" ) {
ThisTick := A_TickCount
If ((ThisTick - PrevTick) > 500)
Find := Chr(W)
Else
Find .= Chr(W)
PrevTick := ThisTick
ItemIndex := DllCall("SendMessage", "Ptr", H, "UInt", 0x018F, "Ptr", -1, "Ptr", &Find, "Ptr")
DllCall("SendMessage", "Ptr", H, "UInt", 0x0186, "Ptr", ItemIndex, "Ptr", 0)
Return 0
}
}
Как видно в функции надо управлять именем vSearchBox. Оригинал тут https://www.autohotkey.com/boards/viewtopic.php?f=76&t=75215&p=325269#p325269
FileEncoding, UTF-8
Устанавливает кодировку по умолчанию для команд: FileRead, FileReadLine, Loop Read, FileAppend и FileOpen
Работает как часы для vSnippets: GuiControl, focus, Snippets
folder := RegExReplace(A_LoopFileFullPath, "snippets\\" , "")
folder := StrReplace(A_LoopFileFullPath, "snippets\" , "")
Тут и дураку ясно что это замена с регулярками и без, но ньюанс в том что при замене строк в StrReplace не надо экранировать слэши, а может и еще чего Поэтому есть уж надо тупую замену делать то ясно и понятно будет строковая замена..
#SingleInstance Force
#Include, Get the URL of the current (active) browser tab.ahk
F2::
a := GetActiveBrowserURL()
MsgBox, YEP %a%
Return
Либа: https://www.autohotkey.com/boards/viewtopic.php?t=3702 или в папке ahk-lib
Способ 1 Убогий способ сохраняет и загружает одну переменную, но это уже прогресс на сегодня. Вызывать функции откуда надо.
loadConfig(){
FileRead, ItemIndex, position.txt
GuiControl, Choose, RunList, %ItemIndex%
}
saveConfig(){
GuiControl, +AltSubmit, RunList
GuiControlGet, ItemIndex, , RunList
GuiControl, -AltSubmit, RunList
FileDelete, position.txt
FileAppend, %ItemIndex%, position.txt
}
Способ 2 Этот способ более мощный, у него есть все возможности AutoHotKeys для расширения, дефолтные значения, не знаю как нассчет массивов и объектов, но по крайней мере уже лучше, ну и код немного короче
IniRead, itemIndex, config.ini, main, LBSites, 2
GuiControl, Choose, LBSites, %itemIndex%
..
saveConfig(){
GuiControl, +AltSubmit, LBSites
GuiControlGet, itemIndex, , LBSites
IniWrite, %itemIndex%, config.ini, main, LBSites
}
Способ 4 Еще культурно сделать сохранение параметров формы и потом восстанавливать при загрузке воспользоваться библиотекой JSON. ее надо подключать. https://github.com/cocobelgica/AutoHotkey-JSON По выходу из приложения сохраняем
.. посеял пример )
По загрузке загружаем и меняем форму
FileRead, configJson, config.json
config := JSON.Load(configJson)
GuiControl, Choose, Site, % config.siteIndex
Дак как.. просто превалять символы апострофом и все но не все так просто работает с этим примером я впарился
Ahk2Exe.exe /in client.ahk /out client.exe /icon favicon.ico
WinGetActiveTitle, Title
Winset, Alwaysontop, , A
if not file
MsgBox, I DIE
Если элемент активен на экране, то парить не надо используй тупо Send
Send, {down}
если все плохо и элемент в жопе, то копай сюда, но чет у меня оно работало через раз.
global LBDone
Gui Add, ListBox,hwndLBDone, фывфыф|sdfasd
..
ControlSend,,{End}, ahk_id %LBDone%
Да так просто, но че-то мутки с названиями у них.. hwnd v g вот мутильщики.. если не сделать глобальной ИДшник, он тупо не будет работать в функциях, но будет работать в метках.. это вообще марока, пол дня искал косяк. Оказывается все дело в видимости.
https://github.com/hi5/TF Код стал еще меньше чем на PHP, но без ТФ все было бы печально. Классический исходник с TF:
#Include, tf.ahk
loop files, *.md
{
file = !%A_LoopFileFullPath%
TF_ReverseLines(file,1,0)
TF_RemoveBlankLines(file)
TF_Replace(file," | "," - ")
}
делает 3 изменения в списке файлов
Похоже единственный нормальный путь, это отловить событие:
OnMessage(0x0100, "CheckForKEYDOWN") ; WM_KEYDOWN
..
CheckForKEYDOWN(W, L, M, H)
{ ; VK_RETURN = 0x0D (13)
If (W = 13) && (A_GuiControl = "Todo")
{
есть метода через создание дефолтной кнопки, но тут не ясно а что если надо 2 кнопки есть метода с модификаторами, но там надо проверять активный элемент, тоже выглядит как костылина
Gui Add, Edit, ge1 x1 y1 w180 h20 r1 vSearch
Gui Add, ListBox, x1 y21 w180 h400 vSite hwndSite, %sites%
..
; on edit change
e1:
Gui,Submit,NoHide
sitesArr := StrSplit(sites, "|")
newArr := []
newStr := ""
for k,v in sitesArr
{
if InStr(v, Search, false)>0
{
newArr.push(v)
}
}
for k,v in newArr
newStr .= "|" v
GuiControl, , Site, % newStr
GuiControl, Choose, site, 1
Return
Прекрасный вариант реализованный в ActionZipper_ahk
вроде как можно было как-то через join но все варианты я не смог запустить, а вот простой цикл работает отлично
for k,v in newArr
newStr .= "|" v
newArr := []
array := ["one", "two", "three"]
; Iterate from 1 to the end of the array:
Loop % array.Length()
MsgBox % array[A_Index]
; Enumerate the array's contents:
For index, value in array
MsgBox % "Item " index " is '" value "'"
ну например перехватом события нажатия на кнопке в элементе
OnMessage(0x0100, "CheckForKEYDOWN") ; WM_KEYDOWN
..
CheckForKEYDOWN(W, L, M, H)
{ ; VK_RETURN = 0x0D (13)
If (W = 13) && (A_GuiControl = "Todo")
{
и более крутой и правильный путь:
Gui Add, Edit, ge1
e1:
..
Return
тут мы просто определяем метку и по изменению оно само вызывает функцию
Вообще говоря по умолчанию если не рисовать высоту, то высота будет нормальной и однострочной, а если высоту указать, то вероятно придется указывать и количество строк. А высоту указывать придется т.к. Гуй как правило рисуется с определенной точностью. Gui Add, Edit, r1
там можно и по другому еще есть специальный параметр какой-то
GuiControl,,Edit1,
GuiControl,,Site, |
; Очистить
GuiControl, , Site, |
; перезаписать
GuiControl, , Site, |%sites%
GuiControl, , Site, |вфывф|dasdas|das
да, надо черточку впереди ставить.. это пиздец
Рисуем иконку на http://favicon.cc Кладем рядом и пишем
Menu, Tray, Icon, favicon.ico
Gui Add, Edit, x0 y0
Размеры автоматически не выставляются, поэтому используют костыль ловят событие ресайза и затем меняют ширины и высоты на самом деле не все так страшно, ведь это AutoHotKeys
guisize: ; отлавливаем событие ресайза
GuiControl, Move, MyEdit, w%A_GuiWidth% ; Задаем новые размеры элементу по имени MyEdit (который прописан как vMyEdit у элемента)
return
Видимо отсюда можно и в файл сбрасывать параметры формы например
URLDownloadToFile, http://ya.ru, downloaded.txt
FileRead, downloadedText, downloaded.txt
и тут есть другие примеры: https://www.autohotkey.com/docs/commands/URLDownloadToFile.htm
Надежная 100 пудовая херота, работаетлучшедругих функций и быстро довольно таки, мне хватит для калькулятора
; calc eval
; Name: eval
; Version 1.1 (Tuesday, March 29, 2016)
; Created: Monday, March 28, 2016
; Author: tidbit
; Credit: TLM
; Description: Uses Javascript/COM to evaluate stringed math expressions.
; Supported constants and functions: http://www.w3schools.com/jsref/jsref_obj_math.asp
; Example: msgbox, % eval("5*pi+(7*sqrt(27))/2")
eval(exp)
{
transform, exp, deref, %exp%
; make everything lowercase, set constants to uppercase
exp:=format("{:l}", exp)
exp:=regExReplace(exp, "i)(E|LN2|LN10|LOG2E|LOG10E|PI|SQRT1_2|SQRT2)", "$U1")
exp:=regExReplace(exp, "i)(abs|acos|asin|atan|atan2|ceil|cos|exp|floor"
. "|log|max|min|pow|random|round|sin|sqrt|tan"
. "|E|LN2|LN10|LOG2E|LOG10E|PI|SQRT1_2|SQRT2)", "Math.$1")
obj:=ComObjCreate("HTMLfile")
obj.write("<body><script>document.body.innerText=eval('" exp "');</script>")
return inStr(cabbage:=obj.body.innerText, "body") ? "ERROR" : cabbage
}
но есть еще либа: http://www.computoredge.com/AutoHotkey/Free_AutoHotkey_Scripts_and_Apps_for_Learning_and_Generating_Ideas.html#Eval заметка о ем: https://jacks-autohotkey-blog.com/2020/03/23/eval-function-autohotkey-hotkey-math-calculations/#more-41236
Использовать видимо либу https://github.com/AHK-just-me/Class_CtlColors https://www.autohotkey.com/boards/viewtopic.php?t=2197 пример, надо задать hwnd:
Gui Add, ListBox, x182 y1 w180 h400 vTodo hwndTodo, %linesListbox%
CtlColors.Attach(Todo, "74BC74", "Black")
и есть такой вариант, он ебанутый, т.к. красит вообще все, или я не разобрался:
Gui, Color, , Red ; вот установка фона
Gui, Add, ListBox, w400 r10 vLB ; а вот отрисовка элемента у которого задан фон
а вот так раскашивается фон текста: Gui Color, 11FF77
Кажется что он какой-то корявый, но пока других вариантов нет Gui Add, ListBox, sort x1 y40 w180 h400 vSite , %sites%
да, надо просто добавить опцию sort
Все просто до безобразия, никакие LBEX не нужны, да и LBEX у меня не завелся почему-то.
Gui Add, ListBox, x1 y1 w180 h400 vSite , %sites%
...
GuiControl, Choose, Site, 10
Как так, но этот пример не сработал, копай сюда FileAppend, "Я текст", *
Все плохо
FileDelete, config.json
FileAppend, %strJson%, config.json
Это очень тупо )
https://github.com/cocobelgica/AutoHotkey-JSON
без включения Альтсабмита будет возвращаться текст текущего элемента
GuiControl, +AltSubmit, Site ; enable alternative submit
GuiControlGet, index, , Site ; get index to index var
GuiControl, -AltSubmit, Site ; disable alt submit
Loop Files, *.ahk
{
if A_LoopFileFullPath = %A_ScriptName%
Continue
MsgBox, Filename = %A_LoopFileFullPath%
todo .= A_LoopFileFullPath "|"
}
A_ScriptName
%1% %2% %3%
Тут все просто
fileName := RegExReplace(Todo, "\s*$", "")
Тут все просто:
Gui Add, Edit, vDebug
...
GuiControl,,Debug, 1231231
Да вообщем-то все просто:
Gui Add, Edit, vLogList
..
GuiControlGet, LogList
MsgBox, %LogList%
Да, надо перед обращением сделать GuiControlGet н уи это пиздец как бы.. такого я нигде не видел, типа это инициализация что ли , или поиск элемента как бы.
Лучший вариант пока такой, работает :
#NoEnv
Gui, Add, ListBox, w180 h400 vTodo gTodo, Todo1||Todo2|Todo3
Gui, Show, w400 h420, ActionZipper
OnMessage(0x0100, "CheckForEnter") ; WM_KEYDOWN
Return
GuiClose:
ExitApp
Todo:
Return
CheckForEnter(W, L, M, H) { ; VK_RETURN = 0x0D (13)
If (W = 13) && (A_GuiControl = "Todo")
MsgBox, Bingo!
}
Честно все сделано через жопу. Данный ниже алгоритм расчитан на то что мы можем отловить нажатие Интера на любом окна в винде.
Gui Add, ListBox, x182 y1 w180 h400 vTodo gTodo, %todo%
Gui Show, w400 h420, ActionZipper
...
#IfWinActive, ActionZipper ; Эта херота проверяет активно ли наше приложение по заголовку окна
~Enter::
#IfWinActive
Gui, Submit, noHide
If Todo
Msgbox % Todo
return
а вот если этот вариант показался тугим, то следующий просто сломает башку:
Gui, Add, Button, Default, OK
Gui, Add, ListView, r5 w200 , time|size
Loop, 4
LV_Add("", a_now " " A_Index, 200*A_Index)
LV_ModifyCol()
Gui, Show
return
ButtonOK:
ControlGet, number, List, Count Focused, SysListView321, A
LV_GetText(var, Number,1)
msgbox % var
return
если кратко то GuiControlGet, Variable, , vGuiElementName
Честно я задолбался искать пример. «Чужие для Хищников» сука.. но этот пример работает. Но оно работает при изменении выбранного элемента.. как это сделать по нажатию Enter пока не знаю.
Gui Add, ListBox, x182 y1 w180 h400 vTodo gTodo, %todo%
...
Todo:
GuiControlGet, ItemText, , Todo
GuiControl, +AltSubmit, Todo
GuiControlGet, ItemIndex, , Todo
GuiControl, -AltSubmit, Todo
MsgBox, 0, %Todo%, You selected the item with index %ItemIndex% and text %ItemText%
...
Одна запись на каждую строку листбокса
Loop, Read, 1.txt
ListBox_Text .= A_LoopReadLine "|"
Gui Add, ListBox, x8 y3 w180 h186, %ListBox_Text%
Разбить каждую строку файла по разделителю | и в листбокс положить первую или вторую часть
Loop, Read, 1.txt
{
MyArray := StrSplit( A_LoopReadLine, "|" )
ListBox_Text .= MyArray[2] "|"
}
Gui Add, ListBox, x8 y3 w180 h186, %ListBox_Text%
а вот кажется более правильный вариант как надо бы делать по уму если строки не надо обрабатывать:
FileRead, todo, todo.txt
todo := StrReplace(todo, "`n", "|")
Gui Add, ListBox, x8 y3 w180 h186, %todo%
если надо записать не при инициализации ГУЯ, то делается это так: GuiControl, , LBDone, |%done%
; print_r
print_r(obj) {
For k,v in obj
Str .= k " = " v "`n"
MsgBox, % RTrim(Str, "`n")
}
print_r( arr )
похожий пример:
For i in url
itemlist .= "Item " A_Index " is: " url[i] "`n"