Как использовать Autohotkey Send Command с массивами? - PullRequest
0 голосов
/ 08 мая 2019

Я хочу отправить нажатия клавиш в HTerm и протоколировать его через Блокнот Жесткое кодирование всех отправлений работает нормально, но как только я пробую его с массивами и циклами, ничего не работает (даже не активируя окно)

Я пробовал следующий код со всеми комбинациями Light% A_index%,% Light% A_index%,% LightA_index%, Light [A_index] и т. Д.

Initialization_Loading_1:

Light := ["F0281", "F0282", "F0283", "F0284", "F0285", "F0286", "F0287", "F0288"] ; Define Array

Return

^2::
Loop % Light.Lenght() ; Send Array to HTerm and Protocol with notepad via Loop
{
IfWinExist, HTerm 0.8.1beta
WinActivate ;
Sender := Light%A_index%
Send, %Sender%
Send, {Enter}
Sleep, 100
IfWinExist, Protokoll.txt - Notepad
WinActivate ;
Send, %Sender%
Send, {Enter}
Sleep, 5000
}
Return

Ожидаемый результат должен заключаться в наборе команд в Hterm, а затем в блокноте, просто ничего не происходит, как будто он даже не запускает цикл.

1 Ответ

1 голос
/ 08 мая 2019

Я использовал части вашего кода для тестирования (показано внизу).

Правильный способ сохранения элемента вашего массива ("Light") в вашей переменной ("Sender") выглядит следующим образом Sender := Light[A_Index].

В вашей петле также есть опечатка;это должно быть Loop , % Light.Length() (добавленная запятая не обязательна, но мне нравится для согласованности).Я полагаю, что опечатка может быть причиной того, что вы ничего не увидите.

(Это не проблема, но может сделать ваш код более кратким.) Существуют и другие способы использования данных.Один из вариантов - просто отправить элемент массива напрямую, например, Send , % Light[A_Index].Другой вариант может заключаться в использовании цикла for.Вот пример, основанный на вашем коде:

^3::
Light := ["F0281", "F0282", "F0283", "F0284", "F0285", "F0286", "F0287", "F0288"] ; Define Array
For x In Light
{
    Send , % Light[x] . "{enter}"
    Sleep , 100
}
Return

Код (рабочий), используемый для тестирования:

^2::
Light := ["F0281", "F0282", "F0283", "F0284", "F0285", "F0286", "F0287", "F0288"] ; Define Array
Loop , % Light.Length() ; Send Array to HTerm and Protocol with notepad via Loop
{
    Sender := Light[A_Index]
    Send , %Sender%
    Send , {Enter}
    Sleep , 100
}
Return
...