如何对数组使用Autohotkey发送命令?

时间:2019-05-08 15:10:04

标签: autohotkey

我想向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 个答案:

答案 0 :(得分:1)

我使用了部分代码进行测试(如下所示)。

将数组元素(“ 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