如何在热字串中逐行发送一段文本?

How to send a block of text line-by-line in a hotstring?

我有一个包含多行的文本块,我想将它逐行发送到 chap app。我想要这样的程序:

  1. 我输入一个热字串触发器(例如,hotstringtrigger),AutoHotKey 将发送第一行(文本应保留在聊天应用程序的输入框中)
  2. 我根据自己的需要对其进行编辑
  3. 我按回车键。聊天应用程序将发送文本,而 AutoHotKey 将发送下一行
  4. Return 到 2 直到没有更多的行
  5. Enter 之后将正常运行,直到再次输入 hotstringtrigger

到目前为止,我的尝试是将其拆分为多个热字串:

:*:hotstringtrigger::first line
:*:hotstringtrigger2::second line
:*:hotstringtrigger3::third line
...

但这有一些缺点:

此页面似乎没有涵盖此内容:Hotstrings - Definition & Usage | AutoHotkey

我想非常简单直接的例子可能是这样的

TextToSend := "
(
first line
second line 
)"
 
lines := StrSplit(TextToSend, "`n", "`r")
 
 
:*T:hotstringtrigger::
    SendInput,
    (
    Hello ____________________. Welcome to the World^{Home}{right 6}
    )
    
    i := 1
return
 
~Enter::
    if (!i || i > lines.length())
        return
    
    SendInput, % "{Text}" lines[i]
    i++
return

这里的输入文本只是在脚本启动时输入 continuation section and loaded from there to an array。当您想要的热字串是 运行 时,索引 i 会重置。

然后按 Enter,文本从数组发送,直到我们的索引 i 大于输入字符串中的行长度。

如果您的输入文本有很长的行,您应该先将行加载到剪贴板,然后只需发送 Ctrl + v.

尝试使用 Array:

; Create the array, initially empty:
Array := [] ; or Array := Array()

text =
(
first line
second line
third line
)
; Write to the array:
Loop, parse, text,`n
    Array.Push(A_LoopField) ; Append this line to the array.
return


F1::
Index++ ; checks the number in the variable "Index" and increases it by 1 every time you press F1
if (Index <= Array.MaxIndex())
    SendInput, % Array[Index]
else
    MsgBox, No more lines.
return